在扩展了错误查找之后,我已经缩小了范围,问题似乎出在输入文件中,但是我和我的教授已经广泛地解决了这个问题,所以问题可能出在我的代码上。
该程序(目前)旨在从支持多种数据类型的文件格式中读取行到特殊格式的数组中。
为了测试该功能,我制作了所需类型的临时变量并打印出结果。
这是我的代码:
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测试的情况下运行无格式读取时,都会得到一堆零距和整数,它们之间的间距不正确(包括“输入有问题”)。
在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 OS x86_64
最初,我们认为问题是由于Mac的远程访问损坏引起的,但是即使在本地工作站上进行测试,问题仍然存在。
任何帮助您确定如何读取而不产生垃圾值的帮助,将不胜感激!