2009-10-07 19 views
8

Tôi đang chạy một vòng lặp trong một chương trình Fortran 90 xuất ra các giá trị số cho một tệp đầu ra cho mỗi lần lặp của vòng lặp. Vấn đề là đầu ra không được lưu vào tệp nhưng mỗi bước rất nhiều. Làm thế nào để làm cho nó tuôn ra từng bước?Làm cách nào để xóa đầu ra thành tệp sau mỗi lần ghi bằng chương trình Fortran 90 không dây?

Ví dụ mã:

open(unit=1,file='output') 

do i = 1, 1000 
write(1,*) i 
end do 

close(unit=1) 

Cảm ơn trước.

Trả lời

6

Cách khác, nếu gfortran triển khai, hãy gọi chương trình con không chuẩn. Không phải tất cả các trình biên dịch đều thực hiện điều này.

+4

'FLUSH' như một chương trình con (như trong' gọi FLUSH() ') là không chuẩn, nhưng câu lệnh' FLUSH' là hợp lệ Fortran 2003: 'FLUSH (10)' –

+0

Từ trang web GNU, nó nói: Lệnh FLUSH nội tại và câu lệnh FLUSH của Fortran 2003 có hiệu lực giống nhau: chúng xóa bộ đệm I/O của thư viện thời gian chạy để dữ liệu trở nên hiển thị với các quy trình khác. Điều này không đảm bảo rằng dữ liệu được cam kết vào đĩa. –

12

Bạn cần làm cho đầu ra không bị chặn. Hãy thử đặt biến môi trường GFORTRAN_UNBUFFERED_ALL thành 'y', 'Y' hoặc 1.

+0

Liệu tôi có làm điều này từ bash như sau: GFORTRAN_UNBUFFERED_ALL = 'y' xuất khẩu $ GFORTRAN_UNBUFFERED_ALL ? Chỉ tò mò? – banDedo

+0

Có, mặc dù bạn không cần '$' trong dòng xuất. Điều này sẽ làm việc cho đến khi bạn thoát khỏi trình bao hiện tại. Nếu bạn muốn hành vi này vĩnh viễn, bạn có thể muốn thêm những dòng đó vào tệp '.bashrc' của bạn. –

+0

Tôi đã cố gắng đơn thuốc sau đây và tôi đã gõ: GFORTRAN_UNBUFFERED_ALL = 'y' xuất khẩu GFORTRAN_UNBUFFERED_ALL echo $ GFORTRAN_UNBUFFERED_ALL Echo in giá trị thích hợp. Tôi đã thử điều này với 'y', 'Y' và 1. Không có giải pháp nào được giải quyết. Cảm ơn bạn đã gợi ý, mặc dù. – banDedo

0

Khi tôi cần xả, tôi chỉ cần đóng tệp và mở lại. Đây là vụng về và chậm chạp, nhưng tôi không biết cách nào tốt hơn trong fortran 90 sẽ hoạt động với tất cả các trình biên dịch.