fortran的最大'字符串'长度是多少?
我将从一个可能有很长行的文件中读取行。我现在看的那个每行约有1.3k个字符,但它们可能有更多。我正在读取文件中的每一行到一个字符* 5000变量,但是如果我将来获得更多,那么将它变成一个字符* 5000000变量是不是很糟糕?最大值?有没有比制作非常大的字符变量更好的方法来解决这个问题呢?
答案 0 :(得分:3)
由于通常的Fortran IO是基于记录的,因此将行读入字符串意味着知道最大字符串长度。另一种可能的设计:使用流IO和Fortran将忽略记录边界。以比最长行短的固定长度块读取文件。复杂性是处理跨块边界分割的项目。实用性取决于问题中没有给出的细节。
P.S。来自Adams等人的“The Fortran 2003手册”:“字符串允许的最大长度取决于处理器。” - 意味着编译器依赖。
答案 1 :(得分:0)
最大值取决于实现。对于你的情况,我可以想到这些方面的东西:
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的长区域。