Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用Fortran从带填充的文件中读取行_Fortran - Fatal编程技术网

用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
中有标准命名常量。