File io Fortran 95专用程序,只需读写即可
我试图用fortran 95编写一个程序来读取文件。此文件由软件计算后创建。从这个文件中读取相关信息后,我想写另一个文本文件。我有一个这样的文件File io Fortran 95专用程序,只需读写即可,file-io,fortran,fortran95,File Io,Fortran,Fortran95,我试图用fortran 95编写一个程序来读取文件。此文件由软件计算后创建。从这个文件中读取相关信息后,我想写另一个文本文件。我有一个这样的文件 Model_disp Analysis type NONLIN Step nr. 10 Load factor 1.000E+00 Result DISPLA TOTAL TRANSL Axes GLO
Model_disp
Analysis type NONLIN
Step nr. 10
Load factor 1.000E+00
Result DISPLA TOTAL TRANSL
Axes GLOBAL
Nodnr TDtX TDtY TDtZ
301 -7.359E-03 -7.205E-02 2.207E-02
Analysis type NONLIN
Step nr. 27
Time 3.400E-02
Result DISPLA TOTAL TRANSL
Axes GLOBAL
Nodnr TDtX TDtY TDtZ
301 -7.356E-03 -7.202E-02 2.207E-02
Analysis type NONLIN
Step nr. 44
Time 6.800E-02
Result DISPLA TOTAL TRANSL
Axes GLOBAL
Nodnr TDtX TDtY TDtZ
301 -7.362E-03 -7.202E-02 2.209E-02
..............
..............
..............
Analysis type NONLIN
Step nr. 17010
Time 3.400E+01
Result DISPLA TOTAL TRANSL
Axes GLOBAL
Nodnr TDtX TDtY TDtZ
301 -2.726E-01 -6.948E+00 3.902E+00
我想读取时间、TDtx和TDtz,然后我想将这些参数写入另一个.txt文件。这个文件总共有11014行
我想用fortran编写的程序是:
PROGRAM reading
IMPLICIT NONE
REAL :: Time, TDtx, TDtz
OPEN(1, FILE='Model_disp.txt', &
STATUS='OLD', ACTION='READ'
READ(1,*), Time, TDtx, TDtz
PRINT*, Time, TDtx, TDtz
OPEN(2, FILE='disp.txt', STATUS='NEW', ACTION='WRITE')
WRITE(2,*), Time, TDtx, TDtz
END PROGRAM
不幸的是,我失败了。我不知道我的错误在哪里。
您愿意帮助我吗?如果您只想读取给定格式的输入文件,提取一些内容并将其写入另一个文本文件,那么脚本语言Perl或其他更适合您的需要 假设您想要解析文件,您需要做的工作比read语句多一点。假设: 在一条线上,开始时间是可变的; 在一个起始节点后的一行上,nR是变量TDtx和TDtx; 生产线的排列是适当的。 您可以使用适当的声明、打开等操作: 其中,fmt1和fmt2是所需的格式 示例文件建议首先使用Nodnr,如果是这样,可以通过适当的更改来处理;我从您的示例代码中假设时间是首先读取的 当然,这里还有很多事情要做,比如检查条件。根据您的具体情况,您可能可以简化此操作,或者可能需要更一般
最后,如果您只是在进行文本处理,而输入文件非常不可靠,则其他工具可能更好,但不是必需的。我很想帮助您,但您问题中的代码格式不便于阅读,b您没有告诉我们您是如何失败的。帮助我们帮助您。关于高性能Mark的b,我猜您需要对文件进行一些解析。基本读取无法做到这一点。要扩展fraacescalus注释,您必须确定所需值在文件中的位置。它可能很简单,跳过固定数量的行,读取值,然后重复。如果有变化,您可能必须将文件中的每一行读入一个字符串,并检查是否已读取相关行,如果已读取,则从字符串中读取值\read.F956:警告868-打开单元1可能会影响默认单元“*”的输入操作-是否确实要执行此操作\read.F957:错误573-缺少表达式\read.F957:错误52-编译和编辑强烈依赖于数据格式以及您要对其执行的操作。我经常用Fortran进行后期处理,我了解Python,并在适当的时候使用它。Fortran正则表达式库有时可能是一个解决方案。Fortran是我所知道的唯一程序,这就是为什么我尝试使用Fortran编写程序来帮助我:
do
read(unit_in, '(A)', iostat=iostat) line
if (iostat.ne.0) exit
if (line(1:4).eq.'Time') then
read (line(5:), fmt1) time
cycle
end if
if (line(1:5).eq.'Nodnr') then
read (unit_in, fmt2) junk1, tdtx, junk2, tdtz
write (unit_out, *) time, tdtx, tdtz
end if
end do