File io 最大值';字符串';fortran语言中的长度

File io 最大值';字符串';fortran语言中的长度,file-io,fortran,File Io,Fortran,fortran是否有最大“字符串”长度 我将从一个可能有很长行的文件中读取行。我现在看到的那一行每行大约有1.3k个字符,但它们可能有更多的字符。我正在将文件中的每一行读取到一个字符*5000变量,但是如果将来我得到更多,将其设置为字符*5000000变量是否不好?有马克斯吗?有没有更好的方法来解决这个问题,而不是制作一个非常大的字符变量?由于通常的Fortran IO是基于记录的,将行读入字符串意味着知道最大字符串长度。另一种可能的设计:使用流IO和Fortran将忽略记录边界。以比最长行短的

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


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

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


来自Adams等人的“Fortran 2003手册”的附言:“字符串允许的最大长度取决于处理器。”——意思是取决于编译器。

最大长度取决于实现。就你的情况而言,我可以想到以下几点:

  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',如果您希望记录中有空格c的长区域,则不起作用。

我认为最大长度是所谓的“特定于实现”的内容之一。您需要检查编译器文档。在开始处理内容之前,您真的需要阅读整行内容吗?这一点都不一样,我知道如何声明可分配数组,我想知道是否有一个我可以分配的最大大小。对于可分配数组,您通常可以分配任何内存。字符可能相同,也可能不同(不一样!)。