我已经检查过类似的帖子。解决方案是由M. S. B.在这里Reading data file in Fortran with known number of lines but unknown number of entries in each line当输入文件中有一个变量丢失时,从文件中读取已知数量的变量
所以,我遇到的问题是,从文本文件我试图读取输入。在一行中应该有3个变量。但有时输入文件可能有2个变量。在这种情况下,我需要使最后一个变量为零。我尝试在IOSTAT中使用READ语句,但如果只有两个值,它会转到下一行并读取下一个可用值。当没有第三个值时,我需要在读取2个值后停止在第一行。
我发现一种方法是让一个评论/除了我试图读取的类型(在这种情况下,我阅读的浮点数,而评论是一个字符)这使得IOSTAT> 0,我可以用它作为支票。但是如果在某些情况下我可能没有那个评论。我想确保它甚至比它更有效。代码
read(15,*) x
read(15,*,IOSTAT=ioerr) y,z,w
if (ioerr.gt.0) then
write(*,*)'No value was found'
w=0.0;
goto 409
elseif (ioerr.eq.0) then
write(*,*)'Value found', w
endif
409 read(15,*) a,b
read(15,*) c,d
输入文件的
部分是形式
-1.000 abcd
12.460 28.000 8.00 efg
5.000 5.000 hijk
20.000 21.000 lmno
我需要做,即使没有“8.00 EFG”
这种情况下,它工作的
-1.000 abcd
12.460 28.000
5.000 5.000 hijk
20.000 21.000 lmno
I ca n不使用MSB建议的字符串方法。有没有其他方法?
另一个想法,但没有提到,就是预处理与写的是一种语言的脚本输入文件更适合这类任务(python,perl甚至awk想起来)......看起来这种方法会更简单和更强大。 – mgilson 2012-04-11 11:43:10
这是一个完美的建议。但是,我正在编写20年前编写的代码,此时无法更改输入文件格式。 – jonayat 2012-04-11 15:14:47
我并不是建议你改变输入文件的(预期)格式,只使用脚本将原始格式不正确的文件打包成符合你的代码(20年前写的)所需的文件。 – mgilson 2012-04-11 16:21:54