Xin lỗi nếu đây là một câu hỏi trùng lặp, nhưng tôi không thấy bất cứ điều gì chính xác như thế này.FORTRAN READ()
READ() làm gì trong FORTRAN?
Ví dụ:
READ(1,82)
Xin lỗi nếu đây là một câu hỏi trùng lặp, nhưng tôi không thấy bất cứ điều gì chính xác như thế này.FORTRAN READ()
READ() làm gì trong FORTRAN?
Ví dụ:
READ(1,82)
1 là xử lý tập tin, mà bạn phải mở ra với các cuộc gọi mở thích hợp. 82 là nhãn tham chiếu định dạng, nghĩa là cách bạn sẽ báo cáo dữ liệu theo định dạng hình ảnh.
program foo
implicit none
integer :: i
double precision :: a
write (*,*) 'give me an integer and a float'
read (*,82) i,a
write (*,82) i,a
82 format (I4, F8.3)
end program
Trong ví dụ này, chương trình chấp nhận từ đầu vào chuẩn (không có số đơn vị nào được chỉ định và vì vậy tôi đặt *) một số nguyên và giá trị dấu phẩy động. định dạng nói rằng số nguyên chiếm bốn cột đầu tiên, sau đó tôi có một float nằm trong 8 cột, với 3 chữ số sau dấu thập phân
Nếu tôi chạy chương trình ngay bây giờ và tôi không tuân theo chính xác định dạng này , chương trình sẽ khiếu nại và sụp đổ, bởi vì 4 cột đầu tiên được dự kiến sẽ đại diện cho một số nguyên (do định dạng I4) và "5 3." không phải là một số nguyên hợp lệ
$ ./a.out
give me an integer and a float
5 3.5
At line 7 of file test.f (Unit 5)
Traceback: not available, compile with -ftrace=frame or -ftrace=full
Fortran runtime error: Bad value during integer read
Tuy nhiên, một đặc điểm kỹ thuật chính xác (xin lưu ý ba không gian trước số 5) sẽ thực hiện các hoạt động chính xác (với dung sai nhỏ, nó không phải rằng nghiêm ngặt)
$ ./a.out
give me an integer and a float
5 3.5
5 3.500
$
Cảm ơn bạn đời! Tôi đang nhìn xung quanh để giải thích chính xác điều này. – SRG
Nó đọc từ "đơn vị" (tệp mở) số 1, theo tuyên bố FORMAT tại nhãn 82. Tuy nhiên, vì tuyên bố không liệt kê bất kỳ biến nào, không có chỗ để đặt dữ liệu mà nó đọc Cứu giúp; READ(1,82) FOOBAR
sẽ hữu ích hơn khi đặt dữ liệu mà nó đang đọc trong FOOBAR biến.
IIRC, tệp số 5 là tương đương với stdin và số 6 tương đương với giá trị stdout. Tệp 1 có thể là một tệp trong hệ thống tệp. Tôi có vẻ nhớ rằng những con số này được dự định để lập bản đồ lên ổ băng, nhưng đó là một thời gian dài trước đây. –
@ David, heh yes, mang tôi trở lại tuổi trẻ của tôi! -) –
@David, @Alex, đây là ngôn ngữ lập trình đầu tiên tôi học được! 5 và 6 thực sự là đầu vào và đầu ra tiêu chuẩn, nhưng bạn phải thiết lập các số khác từ dòng lệnh. Và bạn có thể đặt chúng vào bất cứ thứ gì: đĩa, ổ băng, bộ đệm ảo, v.v. – azheglov
Nó đọc từ tổ máy số 1 sử dụng định dạng theo quy định của báo cáo kết quả đánh số 82.
và câu trả lời của bạn sẽ thêm vào chủ đề này như thế nào? – SilentGhost
Bạn có thể làm một vài điều hơn với fortran "đọc" tuyên bố.
xem xét: đọc (đơn vị #, định dạng, tùy chọn) ... generic
read (7,*,end=10)
đâu, "7" là số đơn vị đọc từ, "*" là định dạng (mặc định trong trường hợp này), và "10" là số dòng mà điều khiển chương trình nhảy đến khi thiết bị đọc/tệp đạt đến eOF. Các "tùy chọn" khe có thể được lấp đầy với những thứ như "err = 'số dòng để đi đến" ", hoặc iostat, trước =" không ". Bạn có thể xem some more of these
Phần định dạng là nơi bạn có thể chỉ định chính xác hơn định dạng dữ liệu bạn mong đợi. Ví dụ, nếu bạn có một specifier định dạng như:
read (25,"(2X, 2I5, F7.3, A)")
Ở đây, "2X", đề cập đến 2 không gian, các "2I5", đề cập đến 2 số nguyên có 5 chữ số, "F7.3", đề cập đến một giá trị thập phân có tổng chiều dài là 7, với ba chữ số sau dấu thập phân. Chữ "A" dùng để chỉ một ký tự. Bạn có thể xem thêm một số chi tiết của these
CHÀO MỪNG!
Khi Fortran đọc từ một tệp, nó yêu cầu các câu lệnh READ nhận dạng duy nhất tệp. Việc xác định được thực hiện bằng cách sử dụng định danh đơn vị Fortran.
Một định danh đơn vị có thể là một trong những cách sau:
1) Một biến số nguyên hoặc biểu thức mà giá trị lớn hơn hoặc bằng 0.
2) Một dấu (*) chỉ được phép trên ĐỌC và VIẾT báo cáo. Trên các câu lệnh READ, dấu hoa thị đề cập đến đơn vị 100 (đầu vào tiêu chuẩn).
số đơn vị được cung cấp tốt nhất sử dụng newunit
open(newunit=i,file='test')
Sử dụng các báo cáo Yêu cầu để kiểm tra tính hợp lệ (tồn tại) của bất kỳ số đơn vị trước khi sử dụng nó, như trong ví dụ sau:
logical :: idok, fop
inquire (unit=i, exist=idok, opened=fop)
if (idok .and. .not. fop) then
open (unit = i, ...)
endif
Sau đó, chúng ta có câu lệnh FORMAT, một câu lệnh có nhãn có thể xuất hiện trong bất kỳ phần nào của chương trình mà ở đó định dạng được hiển thị.
Nó có dạng
READ(*,100) I, J, K
Các FORMAT tuyên bố
100 FORMAT(I10,I10,I10)
Một tuyên bố FORMAT hơi khác nhau là
100 FORMAT(3I10.8)
mà một lần nữa mang lại ba số nguyên phải biện minh của chiều rộng 10 nhưng thời gian này yêu cầu phải in tối thiểu 8 chữ số.
Một vài sai lầm: số nhận dạng đơn vị có thể âm (nhưng không phải -1) và sẽ là nếu nó liên quan đến kết nối được tạo bằng bộ định danh 'newunit'; '*' không có nghĩa là 100; 100--102 có thể được cho phép; các đơn vị 0, 5 và 6 không chắc chắn liên quan đến bất kỳ thứ gì; trong khi câu lệnh 'format' có thể xuất hiện ở bất kỳ đâu, nó phải nằm trong cùng phạm vi của các câu lệnh truyền dữ liệu tham chiếu đến nó. – francescalus
Sẽ cập nhật bài đăng – Zeus
Tôi có một số mã nơi người ta sử dụng '6' cho đầu ra màn hình. Các chi tiết chính xác là gì? – Zeus
"1" đơn vị mà bạn đã sử dụng để mở tệp trong fortran và "82" chỉ định định dạng cho lệnh đọc.
open(1,file=fname,status='unknown')
read(1,82) var_name
82 format(2I5)
Đoạn mã trên sẽ mở ra một tập tin gọi là "fname" lệnh đọc đọc từ tập tin fname như nó đã được mở ra với một đơn vị "1" và lệnh đọc đọc trong định dạng theo quy định của định dạng 82. Chi tiết về định dạng trong fortran được đưa ra dưới đây:
nim (Integer Specification)
nfm.d (Floating point Specification)
nEm.d(Exponential Specification)
nAm (string specification)
where
"m" is the number of character spaces reserved for printing. (should be more than what you are reading otherwise read statement would not give correct results)
"n" is the number of integers, floating point, characters or exponential numbers that you want to read.
"d" are the number of decimal places up to which you want to read.
Tôi không chắc chắn rằng "fortran" và "người mới bắt đầu" nên được kết hợp. – stevedbrown