записать вывод в текстовый файл в коде Fortran - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть матрица A (3,4) в Фортране, я хочу написать ее в текстовом файле, например:

 A(1,1) A(2,1) A(3,1)
 A(1,2) A(2,2) A(3,2)
 A(1,3) A(2,3) A(3,3)
 A(1,4) A(2,4) A(3,4)

Я использую код ниже. У него две проблемы: сначала он перезаписывается для каждого i и записывается в строках. Я был бы благодарен, чтобы направить меня, чтобы решить это. Спасибо

      do i=1,4
      open (unit=10,file="out.txt",action="write")
      write (10,*)  A(1,i) , A(2,i) , A(3,i) 
      close (10)

1 Ответ

0 голосов
/ 29 апреля 2019

Как упоминал Ян, ваш файл перезаписывается для каждого i, потому что ваш оператор open находится внутри цикла.Фортран открывает файл заново для каждого i.Переместите оператор open до цикла, чтобы он открывался только один раз.

Конечно, он записан в строках, потому что первый индекс в двумерном массиве - это индекс строки.Вы можете переключать индексы, если хотите.С другой стороны, согласно вашему первому блоку, все выглядит так, как будто вам нужны строки в столбцах.

Вы говорите, что вам нужно написать только некоторые элементы.Пока они находятся в непрерывном блоке, вы захотите использовать implied do loop в операторе записи.Это гораздо более кратко, и вы можете писать большие блоки, не набирая много переменных специально.Это выглядело бы так:

open (unit=10,file="out.txt",action="write")
do i=1,4
   write (10,*)  (A(j,i), j=1,3)
end do
close (10)

Опять же, это переворачивает строки и столбцы, если вы хотите традиционное представление, переключите i и j.

...