~~已解决,见编辑4)
我在 OSX 上使用 Java 创建一个输入文件,当我尝试运行读取输入文件的 FORTRAN 程序时,我在第一行遇到 EOF:
At line 37 of file ../fortran.f (unit = 5, file = 'input2.txt')
Fortran runtime error: End of file
第 37 行开始的地方:
open (5,file='input2.txt')
read(5,*) INDEX
我读到这可能是操作系统的 EOL 字符的问题,我之前遇到过它,但不记得我是如何修复它的。我在 Java 代码中使用“\n”。
我还尝试使用 FORTRAN 代码编写一个简单的文件,在 TextWrangler 中打开它并看到一些前导字符(菱形),因此我将其复制到我的 Java 代码中,但无济于事。
此外,如果我在 Eclipse 中编辑文本并使用 FORTRAN 程序运行它,它就可以工作。
请帮助,在此先感谢
Edit1) 这是 input2.txt 的 Hexdump,我没有看到任何奇怪的东西,但是我的眼睛没有受过训练。
00000000 31 0a 32 0a 4e 69 74 72 6f 67 65 6e 0a 30 2e 30 |1.2.Nitrogen.0.0|
00000010 09 30 2e 30 09 30 2e 30 09 30 2e 30 09 30 2e 30 |.0.0.0.0.0.0.0.0|
*
00000030 09 0a 48 79 64 72 6f 67 65 6e 0a 30 2e 30 09 30 |..Hydrogen.0.0.0|
00000040 2e 30 09 30 2e 30 09 30 2e 30 09 30 2e 30 09 30 |.0.0.0.0.0.0.0.0|
00000050 2e 30 09 30 2e 30 09 30 2e 30 09 30 2e 30 0a 30 |.0.0.0.0.0.0.0.0|
00000060 20 35 39 34 2e 30 20 20 31 2e 30 0a 30 2e 35 20 | 594.0 1.0.0.5 |
00000070 30 2e 35 20 0a 30 0a 0a |0.5 .0..|
00000078
这些零现在还可以,Java 代码中的小错误,但 FORTRAN 仍然应该在计算中给我 NaN。
Edit2)来自测试文件的十六进制转储:
00000000 20 62 6c 61 68 0a 20 62 6c 61 68 0a 20 62 6c 61 | blah. blah. bla|
00000010 68 0a 0a |h..|
00000013
我以前遇到过这个问题,一个人通过将 EOL 显式设置为 ^M (而不是 Unix 的 ^J)成功地测试了文件,但是,我不知道如何用 java 做到这一点,不应该是 EOL 约定如果 program.f 在同一台机器上编译,是否相同?
Edit3) 好的,似乎该文件被写入我的“/Users/Tricknology/”目录,而不是我运行程序的位置。然而,这让我遇到了一个问题。
file='/Users/Tricknology/Desktop/Programming/FORTRAN/input2.txt'
太长了,并且
file='/Users/Tricknology/Desktop/Programming'
&/FORTRAN/input2.txt'
产生:
At line 32 of file ../fortran.f (unit = 4, file = '')
Fortran runtime error: File '/Users/Tricknology/Desktop/Programming /Thermo/OUTPUT2' does not exist
(包括空格)
任何人都知道使这项工作的方法吗?我认为这是问题的根源。
Edit4)找到解决方案:
我将读取行更改为
open (4,file=fileplace//"OUTPUT2", action='write')
在哪里
CHARACTER(*), PARAMETER :: fileplace =
&"/Users/Tricknology/Desktop/Programming/FORTRAN/"
它有效。谢谢大家,我希望这可以帮助其他人在未来节省很多时间。