1

我正在尝试从 intel ifort 转移到 IBM xlf,但是在读取“未格式化的输出数据”(未格式化的意思是它们的长度不同)时,出现了问题。这是一个例子:

program main
implicit none
real(8) a,b
open(unit=10,file='1.txt')
read (10,*) a
read (10,*) b
write(*,'(E20.14E2)'),a,b
close(10)
end program

1.txt:

0.10640229631236
8.5122792850319D-02

使用 ifort 我得到输出:

0.10640229631236E+00
0.85122792850319E-01

使用 xlf 我得到输出:

' in the input file.  The program will recover by assuming a zero in its place.e invalid digit '
0.10640229631236E+00
0.85122792850319E-01

由于1.txt中的数据是未格式化的,所以我无法使用固定的格式来读取数据。有谁知道如何解决这个警告?

4

1 回答 1

0

(评论中回答的问题。请参阅没有答案的问题,但问题已在评论中解决(或在聊天中扩展)

@MSB 写道:

输入文件中是否有撇号?或者除了数字、小数点和“D”之外的任何字符?您的阅读是“列表定向”。

OP写道:

是的,在 0.10640229631236 之后似乎有一些字符会导致此警告。当我手动将这些数字写入新文件时(通过回车键更改 0.10640229631236 之后的行),此警告消失。我cat -v有这两个文件:使用警告文件我得到 0.10640229631236^M 8.5122792850319D-02 而没有警告文件我得到 0.10640229631236 8.5122792850319D-02 你知道 M 代表什么以及它来自哪里吗?

@agentp 给出了链接:

'^M' 字符在行尾

这解释了 ^M 是用于回车的 windows 字符

于 2015-01-25T17:55:34.877 回答