2

以下に示すように、区切り文字としてコンマを使用するデータファイルを読み込もうとしています。

IPE 80,764,80.14,8.49
IPE 100,1030,171,15.92

しかし、私が使用して読んだ場合

READ(1,*) var1, var2, var3, var4

IPEと80を異なるデータとして読み取ります。つまり、カンマとスペースの両方を区切り文字としてカウントしますが、これは必要ありません。プログラムに「スペースは区切り文字ではなく、コンマだけです!」とどのように伝えることができますか。?

4

1 に答える 1

7

1つの可能性は、行全体を文字列バッファーに読み込み、区切り文字(の一部)を自分で探すことです。あなたの例と同様に、最初の列だけに空白が含まれていると仮定すると、次のようになります。

program test
  implicit none

  character(1024) :: buffer
  character(20) :: var1
  integer :: pos, var2
  real :: var3, var4

  read(*,"(A)") buffer
  pos = index(buffer, ",")
  var1 = buffer(1:pos-1)
  read(buffer(pos+1:), *) var2, var3, var4
  print *, var1, var2, var3, var4

end program test

このようにして、スペースの影響を受ける文字列のその部分を手動で分割し、その後のすべてをreadステートメントを介して便利に読み取ります。最初のフィールドだけでなく他のフィールドにも空白を含めることができる場合は、上記の例を拡張して、index()関数を介してバッファー内の必要なすべての区切り文字を探すのは簡単です。

于 2013-03-18T20:06:18.660 に答える