Jestem nowy w firmie Fortran i chciałbym móc napisać dwuwymiarową tablicę do pliku tekstowego, w sposób zgodny z wierszami (odstępy pomiędzy kolumnami i każdy wiersz w osobnej linii). Próbowałem następujące, i wydaje się działać w następujący prosty przykład:W Fortranie 90, jaki jest dobry sposób na zapisanie tablicy do pliku tekstowego, wierszowo?
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
Jak powiedziałem, to wydaje się działać dobrze w tym prostym przykładzie: wynikowy plik tekstowy, aoutput.txt, zawierającego liczby 1-762 na linii 1, numery 763-1524 na linii 2 i tak dalej.
Ale kiedy używam powyższych pomysłów (tj. Od ostatniej piątej do ostatniej, czwartej do ostatniej, trzeciej do ostatniej i drugiej do ostatniej linii kodu powyżej) w bardziej skomplikowanym program, wpadam w kłopoty; każdy wiersz jest ograniczony (przez nową linię) tylko sporadycznie, jak się wydaje. (Nie pisałem i prawdopodobnie nie będę publikował tutaj całego mojego skomplikowanego programu/skryptu - ponieważ jest dość długi.) Brak spójnych ograniczników wierszy w moim skomplikowanym programie/skrypcie prawdopodobnie sugeruje kolejny błąd w moim kodzie, nie z czteroliniowa procedura zapisu do pliku powyżej, ponieważ powyższy prosty przykład wydaje się działać poprawnie. Mimo to zastanawiam się, czy możesz mi pomóc, jeśli pomyślę o lepszym pisaniu do pliku w formacie, którego powinienem użyć?
Dziękuję bardzo za poświęcony czas. Bardzo to doceniam.
Metoda, której używasz wydaje mi się w porządku. Mówisz, że prawdziwy program jest bardziej skomplikowany, ale jedyne, co ma znaczenie, to specyfikacja tablicy i nie widzę, jak to może być bardziej skomplikowane, tylko większe. Czy jesteś pewien, że granice (numrows, numcols) używane w tym programie są poprawne? – eriktous
Czy możesz przedstawić dość mały program przykładowy, który odtwarza chore zachowanie, które napotykasz? Przykład jest dość dobry i nie widząc niczego "konkretnego", trudno jest spekulować na temat ewentualnych błędów w twoim większym programie. – Rook