Tôi mới sử dụng Fortran, và tôi muốn viết một mảng hai chiều vào một tệp văn bản, theo cách thông minh (khoảng cách giữa các cột và mỗi hàng trên một dòng riêng). Tôi đã thử những điều sau đây, và có vẻ như để làm việc trong các ví dụ đơn giản sau:Trong Fortran 90, cách tốt nhất để viết một mảng vào một tệp văn bản, hàng khôn ngoan là gì?
PROGRAM test3
IMPLICIT NONE
INTEGER :: i, j, k, numrows, numcols
INTEGER, DIMENSION(:,:), ALLOCATABLE :: a
numrows=5001
numcols=762
ALLOCATE(a(numrows,numcols))
k=1
DO i=1,SIZE(a,1)
DO j=1,SIZE(a,2)
a(i,j)=k
k=k+1
END DO
END DO
OPEN(UNIT=12, FILE="aoutput.txt", ACTION="write", STATUS="replace")
DO i=1,numrows
WRITE(12,*) (a(i,j), j=1,numcols)
END DO
END PROGRAM test3
Như tôi đã nói, điều này dường như làm việc tốt trong ví dụ đơn giản này: kết quả các tập tin văn bản, aoutput.txt, chứa các số 1-762 trên dòng 1, số 763-1524 trên dòng 2, v.v.
Tuy nhiên, khi tôi sử dụng các ý tưởng trên (ví dụ: dòng thứ năm cuối cùng, thứ tư đến cuối cùng, thứ ba đến cuối cùng và dòng thứ hai đến cuối cùng ở trên) phức tạp hơn chương trình, tôi gặp rắc rối; mỗi hàng được phân cách (bởi một dòng mới) chỉ có liên tục, có vẻ như. (Tôi chưa đăng và có thể sẽ không đăng bài, ở đây toàn bộ chương trình/tập lệnh phức tạp của tôi - vì nó khá dài.) Việc thiếu các dấu phân cách hàng nhất quán trong chương trình/tập lệnh phức tạp của tôi có thể gợi ý một lỗi khác trong mã của tôi, chứ không phải bốn dòng ghi-to-file thường xuyên ở trên, kể từ khi ví dụ đơn giản trên xuất hiện để làm việc được. Tuy nhiên, tôi tự hỏi, bạn có thể xin vui lòng giúp tôi nghĩ rằng nếu có một tốt hơn hàng-khôn ngoan ghi-to-văn bản tập tin thường xuyên mà tôi nên sử dụng?
Cảm ơn bạn rất nhiều vì đã dành thời gian. Tôi rất trân trọng điều này.
Phương pháp bạn sử dụng có vẻ ổn với tôi. Bạn nói chương trình thực sự phức tạp hơn, nhưng điều duy nhất quan trọng là các chi tiết cụ thể của mảng, và tôi không thấy nó phức tạp hơn thế nào, chỉ lớn hơn. Bạn có chắc chắn các giới hạn (numrows, numcols) bạn sử dụng trong chương trình đó là chính xác không? – eriktous
Bạn có thể trình bày một chương trình mẫu nhỏ hợp lý để tái tạo hành vi xấu mà bạn đang gặp phải không? Ví dụ là khá tốt, và không nhìn thấy bất cứ điều gì "cụ thể" thật khó để suy đoán về những lỗi có thể xảy ra trong chương trình lớn hơn của bạn. – Rook