String 读取内容取决于第一个字符的行

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

在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 -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