web-dev-qa-db-ja.com

Fortranでスペースを含む文字列を読み取る

ユーザーから読み取る文字列にスペースが含まれている場合、Fortranでread(アスタリスク、アスタリスク)を使用しても機能しないようです。次のコードについて考えてみます。

    character(Len = 1000) :: input = ' '
    read(*,*) input

ユーザーが文字列「Hello、my name is John Doe」を入力すると、「Hello」のみが入力に保存されます。スペースの後のすべては無視されます。私の仮定では、コンパイラは「Hello」が最初の引数であり、「my」が2番目の引数であると想定しているため、他の単語をキャプチャするには、read(のようなものを使用する必要があります。 =)input1、input2、input3 ...など。このアプローチの問題は、入力ごとに大きな文字配列を作成する必要があり、入力される単語の数を正確に知る必要があることです。これを回避する方法はありますか?文全体、スペース、その他すべてを実際に読み取る関数はありますか?どうもありがとう!

11
Gautam
  character(100) :: line

  write(*,'("Enter some text: ",\)')
  read(*,'(A)') line
  write(*,'(A)') line

  end

...最大長100(ほとんどの実用的な目的に十分)のテキスト行を読み取り、それを書き戻します。お好みに合わせて変更してください。

24
Rook

read(*, *)の代わりに、read(*, '(a)')を試してください。私はFortranの専門家ではありませんが、readの2番目の引数はフォーマット指定子です(Cのsscanfの2番目の引数と同等です)。 *そこには、不要なリスト形式があります。たとえば、14文字を文字列として読みたい場合は、a14と言うこともできます。

9
John Zwinck