- ベストアンサー
Fortranの'read'のVBへの書き換え方
- Fortranの'read'をVBに書き換える方法を教えてください
- Fortranのread/writeをVBに書き換える方法を教えてください
- Fortranのprogram内でのfile accessに関するエラーが起きています。VBでの書き換え方法を教えてください
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
FORTRANのOPEN命令の引数の意味が判らないのであれば、先ずそのFORTRANの取説あるいは文法書を見ないことには始まらない。 昔使っていたFORTRAN(VAX FORTRAN)には「form='BINARY'」や「convert='BIG_ENDIAN'」といったオプションはなかったので、 正確には判らないが、私の経験から ◎FORTRAN側 (1) FORTRANでのREAL変数は、4バイト実数です。(8バイト、又は16バイトの可能性もある) (2) ファイルを'BINARY'指定でOPENしているので、ファイルに書き込まれているデータはバイナリ形式(メモリ内部形式)と推測できる。 (3) ファイルを'BIG_ENDIAN'指定でOPENしているので、ファイルに書き込まれているバイナリデータはビッグエンディアン形式と推測できる。 ※ これは非常に厄介な状態です。なぜならWindows系の言語ではリトルエンディアンが普通なので、バイトの順番を入れ替えて読まないといけない。 ◎Windows側 (1) バイナリファイルなのでエンコードは関係ない。(エンコードはテキストファイルの時のみ使う) (2) ファイルから1変数分の4バイトをByte配列に読込む。(FORTRANのREALのサイズにより8または16の可能性あり) (3) 読みこんだ4バイトの順番を入れ替える。 (4) 4バイトのByte配列を実数に変換する。 (5) 2~4をデータの個数分繰り返す。 ※ ただし、FORTRANのREALのデータ形式と、VB.NETのSingleのデータ形式が同じとは限らないので正しく変換できないかもしれない。 ※ また、ファイルサイスが572バイトだと、読み込もうとしているデータとサイズが合わないのも気になる。 サンプル(ファイル名等は合わせてください) Dim fs As New FileStream("c:\test.bin", FileMode.Open, FileAccess.Read) Dim buf(3) As Byte ' データ格納用配列(REALが8バイトならbuf(7)にする) Dim fWork As Single ' 実数データ(REALが8バイトならDoubleにする) Dim readSize As Integer ' Readメソッドで読み込んだバイト数 Dim i As Integer For i = 0 To 16 readSize = fs.Read(buf, 0, buf.Length) Array.Reverse(buf) fWork = BitConverter.ToSingle(buf, 0) Console.WriteLine(fWork.ToString()) Next i fs.Close()
その他の回答 (1)
- kmee
- ベストアンサー率55% (1857/3366)
変換はこちら http://www.atmarkit.co.jp/fdotnet/dotnettips/045getbytes/getbytes.html バイト列は、"1""2""3"と言った「文字」で表現しているわではないので、テキストで変換しても無駄です。
お礼
ありがとうございました。ご回答通りにcodingして文字化けしない数字が出た時は感激しました。(10日もあれやこれやとやっていたことが馬鹿みたいに思えました。) これに倣いwriteのほうもcodingしtestまで出来ました。 なを572bytesですが長くなるので、後のread 126回を省略していました。17+126=143 143*4=572で合いました。(余計な気がかりをさしてすみませんでした) 助かりました。 深謝!!!