1

我创建了一个 Fortran 90 代码来过滤和转换另一个程序的文本输出为 csv 格式。该文件包含一个包含各种类型(字符、实数、整数)列的表。有一列通常包含十进制值(概率值)。BUΤ,在某些行中,值应该是十进制“1.000”,该值实际上是整数“1”。

我使用“F5.3”说明符来读取这一列,并且我对表格的每一行都有相同的格式语句。因此,当代码找到“1”时,它会读取“.001”,因为它没有找到小数点。

我可以使用哪些方法来正确(并且通常)读取其他小数中的整数? 我可以只为一些“空格”指定“未格式化”输入吗?

4

3 回答 3

0

您可以尝试使用列表导向输入:使用 * 而不是格式说明符。这将是整个阅读,而不是选定的项目。或者您可以将这些行读入字符串测试它们的内容以决定如何读取它们。如果子字符串有小数点:read (string(M:N), '(F5.3)') value. 如果不是,请使用不同的格式,例如,可能读为 as F5.0

PS“未格式化”是在没有转换的情况下读取二进制数据......它是将数据从文件直接复制到数据项。“listed-directed”是 Fortran 术语,用于在不使用格式规范的情况下读取和转换数据。

于 2013-04-07T13:52:18.310 回答
0

fw.d浮点格式规范 的数据编辑描述符用于通常与零一起使用的输入d(不能省略)。d当浮点数据存储为缩放整数,或者您从整数值进行一些单位转换时,在极少数情况下使用非零。

于 2013-04-08T08:01:45.177 回答
0

好吧,这对我来说有些新意:f90 允许混合使用逗号和空格分隔符来进行简单的列表定向读取:

read(unit,*)v1,v2,v3,v4

带输入

1.222  2 , 3.14 , 4

产量

1.222000  2.000000 3.140000 4.000000
于 2013-04-08T18:20:57.827 回答