Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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 90:读取包含一些“的通用字符串”/&引用;人物_Fortran_Intel Fortran - Fatal编程技术网

Fortran 90:读取包含一些“的通用字符串”/&引用;人物

Fortran 90:读取包含一些“的通用字符串”/&引用;人物,fortran,intel-fortran,Fortran,Intel Fortran,大家好,我在读取一个简单文件中的未格式化字符串时发现了一些问题。当第一个/被找到后,所有的东西都丢失了 这是我想读的文本示例:在固定的前18个字符块(从#Mod到Flow[kW])之后,有一个化学物种名称列表,它们是我正在编写的程序中的变量(在本例中为5) #Mod ID Mod Name Type C. #Coll MF[kg/s] Pres.[Pa] Pres.[bar] Temp.[K] Temp.[C] Ent[kJ/kg K]

大家好,我在读取一个简单文件中的未格式化字符串时发现了一些问题。当第一个/被找到后,所有的东西都丢失了

这是我想读的文本示例:在固定的前18个字符块(从#Mod到Flow[kW])之后,有一个化学物种名称列表,它们是我正在编写的程序中的变量(在本例中为5)

 #Mod  ID Mod  Name       Type C.  #Coll    MF[kg/s]    Pres.[Pa]    Pres.[bar]    Temp.[K]    Temp.[C]    Ent[kJ/kg K]    Power[kW]    RPM[rad/s]    Heat Flow[kW]     METHANE     ETHANE      PROPANE    NITROGEN    H2O       
在一些正式检查之后,我想跳过前18个区块,然后阅读化学物种。为了实现前者,我创建了一个维度为18的字符数组,每个长度为20

character(20), dimension(18)       :: chapp
然后我想将18个块与字符数组相关联

read(1,*) (chapp(i),i=1,18)
…但结果是:从chapp(1)到chapp(7)保存了右前7个字符串,但这是chapp(8)

从现在开始,一切都是空白的


我怎样才能克服这个阅读问题呢?

这个问题是由于您使用了列表定向输入(格式为*)。列表定向输入对于快速和肮脏的输入很有用,但它有其局限性和怪癖

您偶然发现了一个怪癖:输入中的斜杠(
/
)终止了对READ语句的输入列表的赋值。这正是您上面描述的行为

这不是编译器编写器的选择,而是所有相关Fortran标准的强制要求

解决方案是使用格式化输入。有几个选项可供选择:

如果您知道标签将始终位于同一列中,则可以使用格式字符串(如
”(1X、A4、2X、A2、1X、A3、2X)
(此操作不完整)来读取各个标签。这很容易出错,如果写出数据的程序出于某种原因更改了格式,或者如果标签是手工编辑的,这也很糟糕

如果可以控制写入标签的程序,则可以使用制表符分隔各个标签(以及以后的标签)。读取整行,使用
索引将其拆分为制表符分隔的子字符串,并使用
(A)
格式读取各个字段。不要使用列表导向格式,否则您将受到上述
/
怪癖的影响。这样做的好处是,标签中还可以包含空格,而且数据可以很容易地从Excel导入/导入Excel。这是我在这种情况下通常做的事情


否则,您可以读取整行内容并在多个空格上拆分。这比在单个制表符上拆分要复杂一些,但如果您无法控制数据源,它可能是最好的选择。你不可能有包含空格的标签。

可能不是真正的重复,但请看你为什么看到你所做的事情的答案。我不知道在无格式模式下阅读可能会有一些怪癖,现在我知道了!非常感谢。
chapp(8) = 'MF[kg               '