fortran 是否有最大“字符串”长度?
我将从一个可能有很长行的文件中读取行。我现在看到的每行大约有 1.3k 个字符,但它们可能有更多。我正在将文件中的每一行读取到一个字符 * 5000 变量中,但是如果将来我得到更多,将其设置为字符 * 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 的长区域。