我尝试用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
我想读取Time,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
不幸的是,我失败了。我不知道我的错误在哪里。 你想帮助我吗?
答案 0 :(得分:0)
如果您只想阅读给定格式的输入文件,提取并将其写入另一个文本文件,脚本语言(Python,Perl等)将更好地满足您的需求。
答案 1 :(得分:0)
假设您要解析文件,则需要执行比read
语句更多的操作。做出以下假设:
time
; TDtx
和TDtx
; 你可以做一些事情(使用适当的声明,open
等):
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
其中fmt1
和fmt2
是所需的格式。
示例文件建议首先使用“Nodnr”,如果是,则可以使用适当的更改来处理;我假设您的示例代码首先会读取time
。
当然,还有很多其他工作要做,例如检查条件。根据您的确切情况,您可以使这更简单,或者可能需要更加通用。
最后,如果您只是进行文本处理而输入文件非常不可靠,则其他工具可能会更好(但不是必需的)。