我花了几个小时在互联网上寻找解决这个问题的方法,却找不到任何东西.我一直在尝试将未格式化的输出写入CSV输出文件,该文件具有多个不同长度和多种数据类型的非常长的行.我正在尝试首先编写一个长标题,指示将在下面写入的变量,用逗号分隔.然后在下面的行上,我正在写标题中指定的值.但是,通过顺序访问,长输出行被分成多个较短的行,这不是我所希望的.我尝试在open语句中使用recl控制行长度,但是在输出后只添加了一堆乱码文本和符号,但仍然出现相同的问题.我也试过使用直接访问,但行的长度不一样,所以也不行.我已经阅读过在Fortran2003中使用流i/o,但我使用的是Fortran90,所以这也不行.我正在使用Fortran 90和使用FTN95编译器的Plato IDE.我在下面添加了一个类似于我想要做的示例程序,使用数组和一些虚拟文本,我在下面包含了说明问题的输出.任何人都知道每个写声明我只能一行吗?任何帮助将不胜感激.任何人都知道每个写声明我只能一行吗?任何帮助将不胜感激.任何人都知道每个写声明我只能一行吗?任何帮助将不胜感激.
module types
integer, parameter :: dp=selected_real_kind(15)
end module types
program blah
use types
use inputoutput
implicit none
integer :: i
character(50)::fileNm
integer :: unitout2=20
real(dp), dimension(100) :: bigArray
fileNm='predictout2.csv'
open(unit=unitout2,file=fileNm,status="replace")
do i=1,100
bigArray(i)=i
end do
write(unitout2,*)"word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,&
&word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,&
&word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word"
write(unitout2,*)bigArray
close(unitout2)
end program
Run Code Online (Sandbox Code Playgroud)
这是上面程序的输出(没有recl):
word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word
,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,word,wo
rd,word,word,word,word,word
1.00000000000 2.00000000000 3.00000000000 4.00000000000
5.00000000000 6.00000000000 7.00000000000 8.00000000000
9.00000000000 10.0000000000 11.0000000000 12.0000000000
13.0000000000 14.0000000000 15.0000000000 16.0000000000
17.0000000000 18.0000000000 19.0000000000 20.0000000000
21.0000000000 22.0000000000 23.0000000000 24.0000000000
25.0000000000 26.0000000000 27.0000000000 28.0000000000
29.0000000000 30.0000000000 31.0000000000 …Run Code Online (Sandbox Code Playgroud) 这个问题已经在以前的 SO 问题中有所涉及。然而,之前的讨论似乎有些不完整。
Fortran 有几个 I/O 语句。有READ(*,*)andWRITE(*,*)等。第一个星号 (*) 是标准星号,表示从键盘到屏幕的输入或输出。我的问题是关于第二个星号:
第二个星号指定 I/O 元素的格式,即正在使用的数据类型。如果此星号保持不变,则 fortran 编译器将使用默认格式(无论是什么格式,都取决于编译器)。用户必须使用许多格式描述符来指定数据类型、精度等。
(1) 这些格式描述符是否适用于所有 Fortran 编译器和所有版本的 Fortran?
(2) 在哪里可以找到这些格式描述符的标准列表?例如,F8.3表示数字应使用字段宽度为 8 和小数点后 3 位的定点表示法打印。
编辑:可以在此处找到编辑描述符的参考:http : //fortranwiki.org/fortran/show/Edit+descriptors
该write函数确实打印了columms之间有很多空格的参数,这最终给了我一个非常庞大的文件.那么我如何修剪输出,以便像一个空格.
open(unit=1,file='gfortran.txt')
write(1,ERR=1001)1,2,3
Run Code Online (Sandbox Code Playgroud)