File io 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

我试图用fortran 95编写一个程序来读取文件。此文件由软件计算后创建。从这个文件中读取相关信息后,我想写另一个文本文件。我有一个这样的文件

 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