String 读取内容取决于第一个字符的行
在Fortran中,什么是阅读的实际方式:String 读取内容取决于第一个字符的行,string,io,fortran,fortran90,String,Io,Fortran,Fortran90,在Fortran中,什么是阅读的实际方式: A 1. 2. 3. 如果第一个字符是“A”,但不读取: Z 例如,如果第一个字符是“Z”,则使用rest 如果我试着通读这句话: read(1,*)char, number1, number2, number3 如果数字丢失,则会发生错误。因此,我需要一种读取“a”的方法,保持在该行,根据“a”或“Z”的读数,如果需要,其余的部分。与您想要的稍有不同的是,将第一个字母替换为要读取的数字的数量,如 3 1. 2. 3. 0 2 3.14
A 1. 2. 3.
如果第一个字符是“A”,但不读取:
Z
例如,如果第一个字符是“Z”,则使用rest
如果我试着通读这句话:
read(1,*)char, number1, number2, number3
如果数字丢失,则会发生错误。因此,我需要一种读取“a”的方法,保持在该行,根据“a”或“Z”的读数,如果需要,其余的部分。与您想要的稍有不同的是,将第一个字母替换为要读取的数字的数量,如
3 1. 2. 3.
0
2 3.14 -1.
然后,如果每行中要读取的最大元素数为nmax
,则声明
integer::i,n
real(dimension=nmax)::number
和使用
read(1,*) n, (number(i), i=1,n)
如果你真的想继续使用字母,你可以使用
iachar()
破解一些东西,将字符的ASCII值转换成要读取的实数。这里有一个你可能不知道的好技巧。您可以在read语句中单位编号所在的位置放置字符变量。您将从变量而不是文件中读取
首先声明一个长度足以读取最长行的字符变量。将整行读入该变量。从变量中读取第一个字符。如果是A,请读入数字。它看起来是这样的:
character*130 :: MyLine
read(1,'(a130)') MyLine
read(MyLine,*) char
if (char == 'A') then
read(MyLine,*) char, number1, number2, number3
endif
您始终可以读取标志并使用iolist中的表达式来确定是否要读取更多内容。
az.f90: az.txt:
A 1. 2. 3.
Z
a 4. 5. 6.
z
输出:
numbers read!
1.000000 2.000000 3.000000
nothing read
-1.000000 -1.000000 -1.000000
numbers read!
4.000000 5.000000 6.000000
nothing read
-1.000000 -1.000000 -1.000000
numbers read!
1.000000 2.000000 3.000000
nothing read
-1.000000 -1.000000 -1.000000
numbers read!
4.000000 5.000000 6.000000
nothing read
-1.000000 -1.000000 -1.000000