用Fortran从带填充的文件中读取行
如果我有一个文本文件,其中的行包含一些非空白字符,后跟空格,那么如何将这些行读入字符变量而不产生多余的空格用Fortran从带填充的文件中读取行,fortran,Fortran,如果我有一个文本文件,其中的行包含一些非空白字符,后跟空格,那么如何将这些行读入字符变量而不产生多余的空格 character (len=1000) :: text open (unit=20,file="foo.txt",action="read") read (20,"(a)") text 将一行的前1000个字符读入变量文本,如果该行中的字符少于1000个,则该变量文本的末尾将填充空格。但是,如果行长度为100,则有900个额外
character (len=1000) :: text
open (unit=20,file="foo.txt",action="read")
read (20,"(a)") text
将一行的前1000个字符读入变量文本,如果该行中的字符少于1000个,则该变量文本的末尾将填充空格。但是,如果行长度为100,则有900个额外的空格,而程序不“知道”实际读取的行长度。Fortran字符串是空白填充的。用恒定长度的Fortran字符串根本无法区分字符串中任何重要的空白填充 如果每个空格字符都很重要,我建议将该文件视为流访问文件(根据需要格式化或未格式化),将单个字符读取到某个数组缓冲区,并仅在知道实际需要的长度后分配延迟长度字符串
character (len=1000) :: text
integer :: s, ios
open (unit=20,file="foo.txt",action="read")
read (20,"(a)", size=s, advance='no', iostat=ios) text
在最后一行之后,s
包含读取的字符数,包括尾随空格,我认为这是您想要的
注:
使用size
标记时,还必须将advance
标记设置为'no'
,否则会出现编译错误。由于格式为“(a)”
,因此将读取整行,因此下一个read
语句将前进到下一行,尽管“no”
。那很好
ios
在尝试读取超过行尾的数据时存储负整数。如果行的长度小于文本的长度,则总是会发生这种情况。那很好。
当尝试读取超过文件末尾时,ios
将存储不同的负整数。这两个负整数不是标准设置的,所以你可能需要做一些实验。在我的例子中,对于gfortran编译器,ios
在试图读取文件末尾时为-1,否则为-2。很抱歉,在您编辑之后,我不太明白您的意图。你的目标是什么?你可能应该举一些例子。“在没有多余空格的情况下将这些行读入字符变量”听起来像是胡说八道。你怎么能读懂一行并知道实际的行是什么?它是有100个字符和换行符,还是有100个非空白字符和900个空格和换行符?如果你读入一个len=1000个字符的变量,你就说不出来。你说不出来,我的答案提供了一些解决方案。然而,我真的不明白这与“在没有多余空格的情况下将这些行读入字符变量”有什么关系。也许你想把你的问题改写得更清楚些?可能有一些例子。你真的不想用这些额外的空格来读吗?或者哪些空格是额外的,文件中的还是变量中的?请澄清。iso\u fortran\u env
中有标准命名常量。