Fortranには最大の「文字列」の長さがありますか?
非常に長い行を持つ可能性のあるファイルから行を読み取るつもりです。私が今見ているものは、1 行あたり約 1.3k 文字ですが、それ以上になる可能性があります。ファイルから各行を character*5000 変数に読み込んでいますが、将来さらに取得する場合、character*5000000 変数にするのは悪いことですか? マックスはありますか?非常に大きな文字変数を作成するよりも、この問題を解決するためのより良い方法はありますか?
通常の Fortran IO はレコード ベースであるため、行を文字列に読み込むことは、文字列の最大長を知っていることを意味します。別の可能な設計: ストリーム IO を使用すると、Fortran はレコード境界を無視します。最長の行よりも短い固定長のチャンクでファイルを読み取ります。複雑なのは、チャンクの境界を越えて分割されたアイテムを処理することです。実用性は、質問に記載されていない詳細に依存します。
PS Adams 他による「The Fortran 2003 Handbook」より: 「文字列に許可される最大長はプロセッサに依存します。」-- コンパイラに依存することを意味します。
最大値は実装に依存します。あなたの場合、私はこれらの線に沿って何かを考えることができます:
character(:),allocatable :: ch
l = 5
do
allocate(character(l) :: ch)
read(unit,'(a)',iostat=io) ch
if (ch(l-4:l) = ' ' .or. io/=0) exit
deallocate(ch)
l = l * 2
end do
pad='no' の場合、およびレコードに spacec を含む長いリージョンが予想される場合は、明らかに機能しません。