我正在将我的一个代码转换为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上工作。
由于
答案 0 :(得分:0)
当您使用自由格式输出(更好地称为
*
格式说明符)时,Fortran会将输出的详细信息留给编译器。一个这样的细节是单行中的字符数。大多数编译器会在一定数量的字符后将输出换行到新行,当您使用自由格式时,您无法对此产生影响。所以它并不是真正被写成'二维数组',它是按顺序写出来的,当它用完'空间'时(如编译器所定义的那样)定期移动到新行。尝试使用这样的格式:< p>
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
答案 1 :(得分:0)
您可以尝试使用具有显式整数(固定长度)的格式:
WRITE(UNIT = 21, '(100i5)') return
如果已知数组中的元素数,则可以使用隐式循环:
WRITE(UNIT = 21, '(100i5)') ( return(j), j=1,n )