3

fortran 是否有最大“字符串”长度?

我将从一个可能有很长行的文件中读取行。我现在看到的每行大约有 1.3k 个字符,但它们可能有更多。我正在将文件中的每一行读取到一个字符 * 5000 变量中,但是如果将来我得到更多,将其设置为字符 * 5000000 变量是不是很糟糕?有最大值吗?有没有比制作非常大的字符变量更好的方法来解决这个问题?

4

2 回答 2

5

由于通常的 Fortran IO 是基于记录的,因此将行读入字符串意味着知道最大字符串长度。另一种可能的设计:使用流 IO 和 Fortran 将忽略记录边界。以比最长行短的固定长度块读取文件。复杂之处在于处理跨块边界拆分的项目。实用性取决于问题中未给出的细节。

PS 来自 Adams 等人的“The Fortran 2003 Handbook”:“字符串允许的最大长度取决于处理器。” -- 表示依赖于编译器。

于 2012-06-29T22:44:39.150 回答
1

最大值将取决于实现。对于您的情况,我可以想到以下几点:

  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 的长区域。

于 2012-06-30T07:43:49.643 回答