file-io - 使用多数据类型输入损坏的 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 测试的情况下运行未格式化的读取时,我都会得到一堆间隔不适当的零和整数(包含时“输入有问题”)。
在要读取的 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 的远程访问损坏,但即使在本地工作站上进行测试,问题仍然存在。
任何关于如何在不生成垃圾值的情况下阅读的帮助将不胜感激!
解决方案
推荐阅读
- ruby-on-rails - 为什么更新 rails gem 也会更新一些非运行时依赖 gem?
- android - 如何跟踪 exoplayer 库中每个下载文件的进度下载百分比?
- ruby - 如何在 Ruby 中实现 CYK 解析算法?
- ios - 复选标记以禁用快速行
- c# - 使用 selenium 循环遍历表(c#)
- html - 在 oracle 10g 中导入 html 文件
- html - 如何使用 Bootstrap 4 将列表组变成下拉菜单?
- pandas - 熊猫数据透视表不要忽略 0
- php - 如何连接控制器类中的两个变量并将其传递给 laravel 中类的所有视图
- javascript - 将功能组件移植到基于类的组件