1

我正在将我的一个代码转换为 fortran 77,但我在存储结果时遇到了问题。

我使用了以下代码

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

然后在 Matlab 中加载文件 name.txt 进行绘图。但是,结果作为二维数组写入文件,因此 matlab 以错误的顺序识别条目。我认为解决方案是将结果作为一维数组写入 name.txt 中。

任何人都可以对将 fortran 的结果写成数组有任何建议吗?例如,我想获取一个文件,其中条目的排序为

1 2 3 4 5 6 7 8 9 10

以外

1 2 3 4 5
6 7 8 9 10。

当然,如果您知道任何更好的方法来绘制从 Fortran 77 获得的结果,它对我也很有用。

顺便说一句,我在 UNIX 上工作。

谢谢

4

2 回答 2

0

当您使用自由格式输出(通常称为

*
格式说明符),Fortran 将输出的详细信息留给编译器。一个这样的细节是单行中的字符数。大多数编译器会在一定数量的字符后将输出换行,当您使用自由格式时,您无法影响这一点。所以它并不是真的被写成一个“二维数组”,它是按顺序写出来的,当它用完“空间”(由编译器定义)时,它会定期移动到一个新行。尝试使用这样的格式:

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

使用上面的格式,编译器被迫将变量结果打印为整数(或一堆整数),并且由于格式中没有换行指令,它将在一行上打印出结果的所有元素. 事实上,它会将它们打印出来,中间没有空格,这可能不是你想要的。添加一个“X”字段标识符以在每个整数之间放置一个空格。

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

这应该会在您的文件中为您提供一个完整的整数行。如果您改用浮点变量,请将I替换为F

查看此页面以获取有关 Fortran77 格式的进一步说明: http ://www.oc.nps.edu/~bird/oc3030_online/fortran/io/io.html

于 2013-07-17T23:21:15.043 回答
0

您可以尝试使用具有明确数量的整数(固定长度)的格式:

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

如果数组中的元素数量已知,则可以使用隐式循环:

WRITE(UNIT = 21, '(100i5)') ( return(j), j=1,n )
于 2015-07-10T09:09:49.323 回答