Поврежденное чтение Fortran95 с вводом нескольких типов данных

После расширенного поиска ошибок, я сузил, что проблема, кажется, исходит из входного файла, но мой Профессор и я уже взялись за эту авеню, таким образом проблема могла быть моим кодом.

Программа (на данный момент) предназначена для чтения строк из формата файла, поддерживающего несколько типов данных, в специально отформатированный массив.

Чтобы проверить эту функциональность, я сделал временную переменную требуемого типа и распечатал результат.

Вот мой код:

program grading
implicit none
integer :: units = 16
integer :: uniti = 20
integer :: stuNum
character(12) :: fname0, fnam1


TYPE struct1
integer :: stNum
character(31) :: fname, Lname, MI(1)
character(22) :: locat
Integer :: phone
character(1) :: gender
integer :: classLevel
character(4) :: Major
integer :: credits
integer :: cmGPA
ENDTYPE struct1

TYPE(struct1), dimension(2) :: records
print *, "Enter the filename to be read"
read *, fname0

call fopen(units, fname0)
call populateType(units, records)
!***************************************************************

 contains

subroutine fopen(units, fname0)
integer, intent(in) :: units
character(12), intent(in) :: fname0
integer :: test
open(unit=units, file=fname0, status="old", action="read", form = "formatted, iostat=test)
if(test /= 0) STOP "Error opening"
end subroutine fopen
!***************************************************************

subroutine populateType(units, records)
integer, intent(in) :: units
TYPE(struct1), dimension(2), intent(out) :: records
TYPE(struct1) :: store
integer :: test, loop

read (units,*, iostat = test)records
if(test > 0) then
write(*,*) "Something wrong with input"
else if (test < 0) then
write(*,*) "end of file reached"
else
print *, records
read *, records
endif

!read(units, 15, iostat=test)records
!if(test /= 0) stop "error reading"
!print *, records
!read *, records

15 format(I5,A31,A22,I7,A1,I1,A4,I2,I3)
close(units, status="keep")
end subroutine populateType
!***************************************************************
end program grading

Всякий раз, когда я запускаю неформатированное чтение без теста iostat, я получаю кучу нулей и целых чисел, которые расположены неправильно ("Включено что-то не так с вводом").

Вызов "more" для файла student.dat для чтения приводит к появлению строк, подобных следующим:

10226FREUD    FRED   ELYNDEN, WASHINGTON     8340115M1PSYC 15185
10110PETERS  ANDREW  JLYNDEN, WASHINGTON     3239550M5ART  63205
10126ARISTOTLE ALICE ACHINO, CALIFORNIA      3330861F3PHIL 78310
10144LUCKY     LUCY  LGRANDVILLE, MICHIGAN   7745424F5HIST 66229
10284ORANGE   DUTCH  VGRAAFSCHAAP, MICHIGAN  3141660M2ENGR 42298

Также я работаю с SMP ОС Debian Linux x86_64

Первоначально мы думали, что проблема связана с повреждением удаленного доступа с Mac, но проблема сохраняется даже при тестировании на локальных рабочих станциях.

Буду признателен за любую помощь в определении того, как читать без создания мусорных значений!

0 ответов

Другие вопросы по тегам