Chọn một trang web để nhận nội dung đã dịch nếu có và xem các sự kiện và ưu đãi tại địa phương. Dựa trên vị trí của bạn, chúng tôi khuyên bạn nên chọn.
Bạn cũng có thể chọn một trang web từ danh sách sau
Làm thế nào để có được hiệu suất trang web tốt nhất
Chọn trang Trung Quốc [bằng tiếng Trung hoặc tiếng Anh] để có hiệu suất trang tốt nhất. Các trang web quốc gia khác của MathWorks không được tối ưu hóa cho các lượt truy cập từ vị trí của bạn
Ferret có thể đọc các tệp dữ liệu nhị phân được định dạng có và không có tiêu đề độ dài bản ghi FORTRAN [các tệp nhị phân không có định dạng độ dài bản ghi FORTRAN còn được gọi là tệp "luồng"]
GHI CHÚ. Các loại tệp này không được hỗ trợ tích cực. Các khả năng trước đây có trong Ferret/PyFerret nhưng các loại tệp hiện đại hơn được khuyến khích vì tính độc lập của máy và tự ghi tài liệu
2. 4. 1 tệp nhị phân có cấu trúc FORTRAN
Các tệp chứa thông tin về độ dài bản ghi được tạo bởi các chương trình FORTRAN bằng cách sử dụng chế độ tạo tệp ACCESS="SEQUENTIAL" [mặc định của FORTRAN] và cả Ferret sử dụng LIST/FORMAT=unf. Các tệp chứa tiêu đề độ dài bản ghi FORTRAN phải có tất cả dữ liệu được căn chỉnh trên ranh giới 4 byte. Giả sử "rrrr" đại diện cho 4 byte thông tin độ dài bản ghi và "dddd" đại diện cho giá trị dữ liệu 4 byte. Sau đó, các tệp có cấu trúc FORTRAN được tổ chức theo một trong hai cách sau
2. 4. 1. 1 Bản ghi có độ dài đồng nhất
Tệp có cấu trúc FORTRAN với các bản ghi có độ dài đồng nhất [3 giá trị dữ liệu dấu phẩy động có độ chính xác đơn trên mỗi bản ghi trong hình này] trông như thế này
rrrr dddd dddd dddd rrrr ...
Mã FORTRAN tạo tệp dữ liệu thuộc loại này có thể trông giống như thế này [truy cập tuần tự là mặc định và không cần chỉ định trong câu lệnh MỞ]
REAL VARI[10], VAR2[10], VAR3[10] ... OPEN[UNIT=20,FORMAT='UNFORMATTED',ACCESS='SEQUENTIAL',FILE='MYFILE.DAT'] ... DO 10 I=1,10 WRITE [20] VAR1[I], VAR2[I], VAR3[I] 10 CONTINUE ....
Để truy cập dữ liệu từ tệp này, hãy sử dụng
yes? SET DATA/EZ/FORMAT=UNF/VAR=var1,var2,var3/COL=3 myfile.dat or, yes? FILE/FORMAT=UNF/VAR=var1,var2,var3/COLUMNS=3 myfile.dat
Điều này rất giống với việc truy cập dữ liệu ASCII với việc bổ sung bộ định tính /FORMAT=unf. Vòng loại /COLUMNS= cho Ferret biết số lượng giá trị dữ liệu trên mỗi bản ghi. Mặc dù là tùy chọn trong ví dụ trên, vòng loại này là bắt buộc nếu số lượng giá trị dữ liệu trên mỗi bản ghi lớn hơn số lượng biến được đọc [các ví dụ sau trong phần "Dữ liệu ASCII"]
2. 4. 1. 2 Hồ sơ có độ dài không đồng đều
Tệp có cấu trúc FORTRAN với các bản ghi có độ dài thay đổi có thể trông như thế này
rrrr dddd dddd rrrr rrrr dddd rrrr rrrr dddd dddd dddd dddd rrrr etc.
Cẩn thận, có thể đọc tệp dữ liệu chứa các bản ghi có độ dài thay đổi được tạo bằng cách sử dụng câu lệnh FORTRAN OPEN không định dạng đơn giản nhất và một câu lệnh WRITE cho mỗi biến. Sử dụng /FORMAT=stream để đọc các tệp như vậy. Lưu ý rằng truy cập tuần tự là mặc định của FORTRAN và không cần chỉ định trong câu lệnh OPEN
REAL VAR1[1000], VAR2[500] ... OPEN [UNIT=20, FORMAT="UNFORMATTED", FILE="MYFILE.DAT"] ... WRITE [20] VAR1 WRITE [20] VAR2 ....
Sử dụng từ hạn định /SKIP để bỏ qua thông tin về độ dài bản ghi [đối số /SKIP theo đơn vị từ 8 byte] và xác định một lưới sẽ không đọc qua các giá trị dữ liệu. Vòng loại /COLUMNS= có thể được sử dụng khi đọc nhiều biến để chỉ định số lượng từ ngăn cách phần đầu của mỗi biến
yes? DEFINE AXIS/X=1:500:1 xaxis yes? DEFINE GRID/X=XAXIS mygrid yes? FILE/FORMAT=stream/SKIP=1003/GRID=mygrid/VAR=var2 myfile.dat
Đối số 1003 là tổng của 1000 từ dữ liệu trong bản ghi 1, cộng với 2 từ thông tin độ dài bản ghi xung quanh các giá trị dữ liệu trong bản ghi 1 [biến var1], cộng với 1 từ thông tin bản ghi trước dữ liệu trong bản ghi 2
Khi đọc từ luồng hoặc tệp nhị phân, toàn bộ lưới được đọc khi dữ liệu được yêu cầu. Để đọc các tập hợp con của dữ liệu, có thể xác định một lưới nhỏ hơn để đọc một tập hợp con các bản ghi và có thể ghi nó ra tệp netCDF, thực hiện lần đọc thứ hai, bỏ qua các bản ghi đầu tiên đó, v.v.
2. 4. 1. 3 tệp nhị phân Fortran, các biến trên các lưới khác nhau
Một số tệp có cấu trúc FORTRAN có nhiều biến trên mỗi bản ghi không chia sẻ lưới chung. Một ví dụ sẽ là một năm của trường hàng tháng toàn cầu được lưu trữ dưới dạng mười hai bản ghi như thế này
rrrr year month field[360x180] rrrr
Kích thước tệp dữ liệu là [1+1+1+360*180+1]*12*4 = 3110592 byte. Không thể đọc một tệp như vậy với bộ định tính /FORMAT=unf nhưng có thể đọc được với bộ định tính /FORMAT=stream được mô tả trong phần tiếp theo. Bằng cách bao gồm bộ định tính /SWAP, kỹ thuật này có thể được sử dụng để đọc các tệp được tạo trên máy có thứ tự byte khác
Các lệnh sau sẽ đọc tệp này và gán dữ liệu cho lưới thích hợp
yes? ! Create an X axis for an entire record. yes? DEFINE AXIS/X=1:`3+360*180+1`:1 binary_x yes? DEFINE AXIS/T=1:12:1 binary_t yes? DEFINE GRID/X=binary_x/T=binary_t binary_g yes? ! Read in everything. yes? FILE/FORMAT=stream/G=binary_g/VAR=val binary_file ! Create the grid for the data field. yes? DEFINE AXIS/MODULO/X=0.5:359.5:1 1deg_x yes? DEFINE AXIS/Y=-89.5:89.5:1 1deg_y yes? DEFINE AXIS/T=15-jan-1999:15-dec-1999:1/UNITS=month month_1999_t yes? DEFINE GRID/X=1deg_x/Y=1deg_y/T=month_1999_t 1deg_1999_g yes? ! Create a variable that uses this grid. yes? LET dummy = x[GX=R_1deg_1999_g] + y[GY=R_1deg_1999_g] + t[GT=R_1deg_1999_g] yes? ! Reshape the data portion of val onto the data grid. yes? LET field = RESHAPE[val[i=4:`3+360*180`],dummy]
2. 4. 2 Dòng tệp nhị phân
Các tệp không có thông tin độ dài bản ghi nhúng được tạo bởi các chương trình FORTRAN bằng cách sử dụng ACCESS="DIRECT" trong các câu lệnh OPEN và bởi các chương trình C sử dụng thư viện C studio. Các tệp này có thể chứa hỗn hợp số nguyên và số thực. Các loại sau đây có thể được đọc từ một tệp không có cấu trúc
FORTRAN
C
Kích thước tính bằng byte
SỐ NGUYÊN*1
than
1
SỐ SỐ*2
ngắn ngủi
2
SỐ SỐ*4
int
4
THỰC*4
trôi nổi
4
THỰC*8
gấp đôi
8
2. 4. 2. 1 Tệp luồng đơn giản
Giả sử "dddd" đại diện cho giá trị dữ liệu 4 byte. Sau đó, tệp nhị phân luồng [hoặc "truy cập trực tiếp"] của FORTRAN REAL*4 hoặc C float là
________số 8Cấu trúc của các bản ghi được ngụ ý bởi chương trình truy cập dữ liệu. Mã FORTRAN tạo tệp nhị phân truy cập trực tiếp có thể trông như thế này
REAL*4 MYVAR[10,5] ... C Use RECL=40 for machines that specify in bytes OPEN[UNIT=20, FILE="myfile.dat", ACCESS="DIRECT", RECL=10] ... DO 100 j = 1, 5 100 WRITE [20,REC=j] [MYVAR[i,j],i=1,10] ....
Sử dụng các lệnh Ferret sau để đọc biến "myvar" từ tệp này
REAL VARI[10], VAR2[10], VAR3[10] ... OPEN[UNIT=20,FORMAT='UNFORMATTED',ACCESS='SEQUENTIAL',FILE='MYFILE.DAT'] ... DO 10 I=1,10 WRITE [20] VAR1[I], VAR2[I], VAR3[I] 10 CONTINUE ....0
Nếu tệp bao gồm một bộ FORTRAN REAL*8 hoặc C nhân đôi, thì
và các lệnh Ferret sau sẽ đọc dữ liệu vào "myvar"
REAL VARI[10], VAR2[10], VAR3[10] ... OPEN[UNIT=20,FORMAT='UNFORMATTED',ACCESS='SEQUENTIAL',FILE='MYFILE.DAT'] ... DO 10 I=1,10 WRITE [20] VAR1[I], VAR2[I], VAR3[I] 10 CONTINUE ....1
Lưu ý việc bổ sung từ hạn định "type". Xem SET DATA/FORMAT=stream để biết thêm chi tiết
Khi đọc từ luồng hoặc tệp nhị phân, toàn bộ lưới được đọc khi dữ liệu được yêu cầu. Để đọc các tập hợp con của dữ liệu, hãy xác định một lưới nhỏ hơn để đọc một tập hợp con các bản ghi và có thể ghi nó ra tệp netCDF, thực hiện lần đọc thứ hai, bỏ qua các bản ghi đầu tiên đó, v.v.
Vì Ferret đại diện cho tất cả các biến là REAL*8, nên nó sẽ đọc tất cả dữ liệu trong các từ 8 byte. Khi ghi dữ liệu bằng lệnh LIST/FORMAT=stream, theo mặc định, nó ghi dữ liệu bằng các từ 8 byte
Bắt đầu với Ferret v7. 45, từ hạn định /OUTTYPE có thể được sử dụng với LIST/FORMAT=stream.
2. 4. 2. 2 tệp luồng hỗn hợp
Ferret có thể đọc các tệp nhị phân chứa hỗn hợp các số thuộc loại khác nhau. Tuy nhiên, một biến Ferret nhất định chỉ có thể là một loại. Giả sử bạn có một tệp chứa hỗn hợp các số REAL*8 và REAL*4
Sau đây sẽ đọc thành công tập tin
REAL VARI[10], VAR2[10], VAR3[10] ... OPEN[UNIT=20,FORMAT='UNFORMATTED',ACCESS='SEQUENTIAL',FILE='MYFILE.DAT'] ... DO 10 I=1,10 WRITE [20] VAR1[I], VAR2[I], VAR3[I] 10 CONTINUE ....2
trong khi
REAL VARI[10], VAR2[10], VAR3[10] ... OPEN[UNIT=20,FORMAT='UNFORMATTED',ACCESS='SEQUENTIAL',FILE='MYFILE.DAT'] ... DO 10 I=1,10 WRITE [20] VAR1[I], VAR2[I], VAR3[I] 10 CONTINUE ....3
Sẽ thất bại
2. 4. 2. 3 tệp luồng được hoán đổi byte
Có thể đọc các tệp truyền phát có số được hoán đổi byte bằng vòng loại /SWAP. Lưu ý rằng các từ hạn định /ORDER và /SKIP cũng có sẵn [xem chương "Thông tin cơ bản về tập dữ liệu", phần "Đọc tệp ASCII", để biết thêm chi tiết về /ORDER và /SKIP]