Мне нужно использовать немного старую программу, написанную в fortran-77. Эта программа считывает 10 переменные из текстового файла в шестнадцатеричном форматеFortran читает hexademical из файла как ASCII
open (2,file=filename, status='old', iostat=ios)
read (2,1) my_variables
1 format (/(10z8))
И одна переменная строка (символ * 4) и я хочу, чтобы получить как «л 414E4950» в шестнадцатеричном к «АНИПУ». Но проблема в том, когда я пытаюсь прочитать данные из файла, я получаю сообщение об ошибке.
Fortran runtime error: Value overflowed during integer read
Как я могу решить эту проблему?
EDIT
Похоже, я упростил проблему слишком много. У меня есть файл данных, который выглядит как:
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)
Как вы можете видеть в файле данных в каждом 12-значном имени кодированного объекта (например, «414E4950» на «ANIP»), и я хочу сохранить его как строку.
P.S.
Чтобы восстановить программу, я написал немного, но очень грязное исправление.
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 массива и tmp_str это символ * 4 Это некрасиво, но работает. Спасибо всем, кто ответил!
Что вы подразумеваете под «одной переменной является строкой»? Дескриптор 'Z' предназначен для числовых типов. Возможно, вы можете показать, что такое 'my_variables', и как оно объявляется? – francescalus
Как я могу ограничить это утверждение (я младший в лаборатории и не знаю fortran;() прочитал (2, 1), прочитал десять численных значений и попытался присвоить его переменным в списке. Каждая переменная в списке имеет числовой тип (integer * 4 или float * 8), но у одного есть символ * 4. – Vladislav
Все становится немного сложнее, потому что 'Z' не находится в Fortran 77.Если у вас действительно есть программа, которая претендует на компилятор F77, это может означать, что она допускает другую интерпретацию 'Z'. Однако в стандартном Fortran 'Z' может использоваться для ввода только с целыми, вещественными и комплексными переменными. Список переменных должен соответствовать формату: если вы хотите прочитать в символьной переменной, вы должны сопоставить эту переменную с подходящей записью в формате. – francescalus