сохранить результат в столбце из фортрана 77

Я конвертирую один из своих кодов в фортран 77, и у меня возникла проблема с сохранением результатов.

Я использовал следующий код

OPEN(UNIT=21, FILE='name.TXT', STATUS='REPLACE')
WRITE(UNIT = 21,*) results
CLOSE(UNIT=21)

а затем загрузите файл name.txt в Matlab для построения графика. Однако результат записывается в файл в виде двумерного массива, поэтому матлаб распознает записи в неправильном порядке. Я думаю, что решение для этого состоит в том, чтобы записать результат в name.txt в виде одномерного массива.

Может у кого-нибудь есть предложения по записи результата из фортрана в виде массива. Например, я хотел бы получить файл, в котором записи упорядочены как

1 2 3 4 5 6 7 8 9 10

Кроме как

1 2 3 4 5
6 7 8 9 10.

Конечно, если вы знаете какой-нибудь лучший способ отобразить результат, полученный с помощью Fortran 77, мне это тоже будет полезно.

Кстати, я работаю на UNIX.

Спасибо


person Taylor    schedule 04.11.2012    source источник
comment
Является ли результат массивом 2D или 1D?   -  person cup    schedule 27.05.2013


Ответы (2)


Когда вы используете вывод в свободном формате (более известный как спецификатор формата

*
), Fortran оставляет детали вывода на усмотрение компилятора. Одной из таких деталей является количество символов в одной строке. Большинство компиляторов переносят вывод на новую строку после определенного количества символов, и когда вы используете свободное форматирование, у вас нет возможности повлиять на это. Таким образом, на самом деле он не записывается как «двумерный массив», он записывается последовательно и периодически перемещается на новую строку, когда заканчивается «пространство» (как определено компилятором). Попробуйте использовать такой формат:

WRITE(UNIT=21, '(I)') results

В приведенном выше формате компилятор вынужден печатать переменную results как целое число (или набор целых чисел), и, поскольку в формате нет инструкций разрыва строки, он будет печатать все элементы results в одной строке. Фактически, он распечатает их без пробелов между ними, что, вероятно, не то, что вам нужно. Добавьте идентификатор поля «X», чтобы поместить пробел между каждым целым числом.

WRITE(UNIT=21, '(I, X)') results

Это должно дать вам одну непрерывную строку целых чисел в вашем файле. Если вместо этого вы используете переменные с плавающей запятой, замените I на F.

Посетите эту страницу для получения дополнительных сведений о форматировании Fortran77: http://www.oc.nps.edu/~bird/oc3030_online/fortran/io/io.html

person c.anna    schedule 17.07.2013

Вы можете попробовать использовать формат с явным числом целых чисел (фиксированной длины):

WRITE(UNIT = 21, '(100i5)') return

Если количество элементов в массиве известно, вы можете использовать неявный цикл:

WRITE(UNIT = 21, '(100i5)') ( return(j), j=1,n )
person RamsesGE    schedule 10.07.2015