0

~~SOLVED, See Edit4)

I am creating an input file with Java on OSX, when I try to run the FORTRAN program that reads the input file, I encounter EOF on the first line:

At line 37 of file ../fortran.f (unit = 5, file = 'input2.txt')
Fortran runtime error: End of file

where line 37 starts:

  open (5,file='input2.txt')
  read(5,*) INDEX

I read that this could be a problem with the OS's EOL character, and I've run into it before but can't remember how I fixed it. I am using "\n" in the Java code.
I also tried writing a simple file from the FORTRAN code, in TextWrangler I opened it and saw some leading character (diamond shaped) so I copied that to my Java code but to no avail.

Also, if I edit a text in Eclipse and run it with the FORTRAN program, it works.
Please help, Thanks in advance

Edit1) Here is the Hexdump of input2.txt, I don't see anything strange, however my eye is untrained.

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

those zeros are okay for now, little bug in the java code but FORTRAN should still give me NaN in the calculation.

Edit2) Hex dump from test file:

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

I've had this problem before, a guy successfully tested the file by explicitly setting EOL to ^M (instead of Unix's ^J), however, I don't know how to do this with java, shouldn't the EOL convention be the same if the program.f is compiled on the same machine?

Edit3) Ok, it seems the file was being written to my "/Users/Tricknology/" directory instead of the location from where I ran the program. However, this led me to a problem.

file='/Users/Tricknology/Desktop/Programming/FORTRAN/input2.txt'

is too long, and

file='/Users/Tricknology/Desktop/Programming'
 &/FORTRAN/input2.txt'

produces:

At line 32 of file ../fortran.f (unit = 4, file = '')
Fortran runtime error: File '/Users/Tricknology/Desktop/Programming                       /Thermo/OUTPUT2' does not exist

(spaces included)

Anyone know of a way to make this work? I think that is the root of the problem.

Edit4) Found the solution:

I changed the read line to

open (4,file=fileplace//"OUTPUT2", action='write')

where

CHARACTER(*), PARAMETER :: fileplace = 
 &"/Users/Tricknology/Desktop/Programming/FORTRAN/"

and it works. Thank you everyone, I hope this helps someone else save a lot of time in the future.

4

2 に答える 2

1

行末の問題が問題であることが判明した場合は、次の名前のメソッドを使用する必要があります

println

Java コードでは、書き出すファイルにはオペレーティング システムに適した行末が含まれます。"\n". _

ただし、それが行末の問題かどうかはわかりません。

表示されている「ひし形」の文字は、ビューアで間違った文字エンコーディングを想定するたびに表示される置換文字である可能性が非常に高いです。たとえば、UTF-8 を書き出すプログラムによって作成されたファイルがあり、それを Windows-1252、Latin-1、または MacRoman のエンコーディングを前提とするエディターで開くと、置換文字が表示されます。それらがポップアップする他のケースもあります。

Java プログラム、Fortran プログラム、およびオペレーティング システムのデフォルトのエンコーディングと、TextWrangler で想定しているエンコーディングがすべて同じであることを確認してください。できれば UTF-8 です。

また、バイナリ エディターでファイル input2.txt を確認するか、単に入力します。

hexdump -C input2.txt

コマンドラインで(TextWranglerについて言及したので、Macを使用していると思います)。最初の数バイトがファイルの終わりを表しているか、Fortran コンパイラが理解できない BOM がそこにある可能性があります。

TL;DR: txt ファイルのバイナリ エンコーディングを見て、BOM やその他の異常がないか確認してください。見つけたものに関係なく、世界のすべてを UTF-8 にします。

于 2013-06-11T06:46:11.547 に答える
0

読み取り行を次のように変更しました。

open (4,file=fileplace//"OUTPUT2", action='write')

open (5,file=fileplace//"input2.txt", action='read')

どこ

CHARACTER(*), PARAMETER :: fileplace = 
 &"/Users/Tricknology/Desktop/Programming/FORTRAN/"
于 2013-06-12T10:58:26.933 に答える