fortran-77で書かれた少し古いプログラムを使用する必要があります。このプログラムは、16進形式のテキストファイルから10個の変数FortranはファイルからhexadicalをASCIIとして読み込みます
open (2,file=filename, status='old', iostat=ios)
read (2,1) my_variables
1 format (/(10z8))
そして、もう一つの変数は、文字列(文字* 4)で読み取って、私は「ANIP」に進で「414E4950」のようななめらかを取得したいです。 しかし、問題は、ファイルからデータを読み込もうとするときにエラーが発生することです。
Fortran runtime error: Value overflowed during integer read
どうすれば解決できますか?
編集私は問題をあまりにも単純化したようです。 は、私は次のようになり、データファイルがあります。
DATA_BLOCK_NAME
3D3 1 23BE 0 0 0 0 0 0 0
041200000414E4950 03F800000 0 16 23BF 0 0
0 0 0 0 0 041200000414E4950 03F800000
0 1E 23C0 0 0 0 0 0 0 0
を、私は、変数に、このデータを読むことをお勧めします。
read (2,1) obj_num,((var_1(j,i),j=1,7),(var_2(j,i),j=1,3),var_3(i),
+ name(i),var_4(i),var_5(i),var_6(i),i=1,obj_num)
obj_numは整数* 4 VAR_1である* 4 VAR_2、var_3、var_4、var_5、var_6は実数 が、の配列である整数の配列です(!)の名前は、文字列の配列(文字* 4)
ですコードファイルのオブジェクト名(例: '414E4950'から 'ANIP')ごとに12番目の値ごとにデータファイルに表示されているように、文字列として保存します。
P.S.
プログラムを修復するには、ちょっとでも非常に汚い修正を書きました。 tmpは整数* 4配列とtmp_strある
read (2,1) obj_num,((var_1(j,i),j=1,7),(var_2(j,i),j=1,3),var_3(i),
+ tmp(i),var_4(i),var_5(i),var_6(i),i=1,obj_num)
do j=1,numcn
do i=1,4
tmp_name(i:i) = CHAR(MOD(tmp(j), 256))
tmp(j) = RSHIFT(tmp(j), 8)
end do
ccns(j) = tmp_name
end do
は文字* 4 それは醜いが、働いています。答えた人に感謝!
「1つの変数は文字列」とはどういう意味ですか? 'Z'編集記述子は数値型です。おそらく、あなたは 'my_variables'が本当に何であるか、それがどのように宣言されるのかを示すことができますか? – francescalus
私はこの声明(私は研究室の中学生であり、fortranを知らない;)read(2、1)は10個の数値を読み、それをリストの変数に代入しようとする。整数* 4または浮動小数点* 8)であるが、文字* 4型を持つもの – Vladislav
'Z'がFortran 77にないため、少し複雑になる。あなたが本当にF77コンパイラのためにあると主張するプログラムを持っているなら、それは 'Z'の別の解釈を許すことを意味するかもしれません。しかし、標準のFortranでは、 'Z'は整数、実数、および複素数変数のみで入力に使用できます。変数のリストは、フォーマットと一致する必要があります。文字変数を読み込みたい場合は、その変数をそのフォーマットの適切なエントリとマッチさせる必要があります。 – francescalus