我创建了一个Fortran 90代码来过滤和转换csv格式的另一个程序的文本输出。该文件包含一个表,其中包含各种类型的列(字符,实数,整数)。有一列通常包含十进制值(概率值)。 BUT,在某些行中,值应为十进制“1.000”,该值实际上是整数“1”。
我使用“F5.3”说明符来读取此列,并且我对表的每一行都有相同的格式语句。因此,当代码找到“1”时,它会显示“.001”,因为它没有找到小数点。
我可以使用哪些方法正确(通常)读取其他小数之间的整数? 我可以仅为许多“空格”指定“未格式化”输入吗?
答案 0 :(得分:0)
您可以尝试使用列表导向的输入:使用*而不是格式说明符。这将是整个读取,而不是选定的项目。或者你可以将这些行读成一个字符串测试他们的内容来决定如何阅读它们。如果子字符串有小数点:read (string(M:N), '(F5.3)') value
。如果没有,请使用其他格式,例如,可能读作F5.0
。
P.S。 “unformatted”正在读取二进制数据而不进行转换......它是从文件到数据项的数据的直接副本。 “列出导演”是Fortran的阅读术语。在不使用格式规范的情况下转换数据。
答案 1 :(得分:0)
浮点格式规范的数据编辑描述符fw.d
是,用于输入,通常使用零d
(不能省略)。非零d
用于极少数情况下浮点数据存储为缩放整数,或者您从整数值进行单位转换。
答案 2 :(得分:0)
这里对我来说是新鲜事:f90允许混合使用逗号和空格分隔符进行简单的列表定向读取:
read(unit,*)v1,v2,v3,v4
带输入
1.222 2 , 3.14 , 4
产量
1.222000 2.000000 3.140000 4.000000