• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Fortranの'read'のVBへの書き換え方)

Fortranの'read'のVBへの書き換え方

このQ&Aのポイント
  • Fortranの'read'をVBに書き換える方法を教えてください
  • Fortranのread/writeをVBに書き換える方法を教えてください
  • Fortranのprogram内でのfile accessに関するエラーが起きています。VBでの書き換え方法を教えてください

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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()

Doubleboggy
質問者

お礼

ありがとうございました。ご回答通りにcodingして文字化けしない数字が出た時は感激しました。(10日もあれやこれやとやっていたことが馬鹿みたいに思えました。) これに倣いwriteのほうもcodingしtestまで出来ました。 なを572bytesですが長くなるので、後のread 126回を省略していました。17+126=143 143*4=572で合いました。(余計な気がかりをさしてすみませんでした) 助かりました。 深謝!!!

その他の回答 (1)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.1

変換はこちら http://www.atmarkit.co.jp/fdotnet/dotnettips/045getbytes/getbytes.html バイト列は、"1""2""3"と言った「文字」で表現しているわではないので、テキストで変換しても無駄です。

関連するQ&A