【发布时间】:2016-08-10 20:33:56
【问题描述】:
我有这个代码来读取 Fortran 保存的数值。该数据有 4800 行和 19 列。
这个数据的头部是这样的
1 2 1.50000000 0.00000000 1 21 240 361 2 0 0 0 0 0 0 0 0 0 0
2 2 1.50000000 0.00000000 1 19 208 390 7 0 0 0 0 0 0 0 0 0 0
3 2 1.50000000 0.00000000 1 13 181 419 11 0 0 0 0 0 0 0 0 0 0
4 2 1.50000000 0.00000000 1 17 213 386 8 0 0 0 0 0 0 0 0 0 0
5 2 1.50000000 0.00000000 1 18 215 389 2 0 0 0 0 0 0 0 0 0 0
6 2 1.50000000 0.00000000 1 18 245 356 5 0 0 0 0 0 0 0 0 0 0
7 2 1.50000000 0.00000000 1 17 205 395 7 0 0 0 0 0 0 0 0 0 0
8 2 1.50000000 0.00000000 1 21 251 350 2 0 0 0 0 0 0 0 0 0 0
9 2 1.50000000 0.00000000 1 17 207 385 15 0 0 0 0 0 0 0 0 0 0
10 2 1.50000000 0.00000000 1 10 142 439 33 0 0 0 0 0 0 0 0 0 0
11 2 1.50000000 0.00000000 1 19 249 353 3 0 0 0 0 0 0 0 0 0 0
列的名称是 sim、infected、beta、epsilon。其他 15 列“countt”只是模拟结果。我编写了这段代码来读取 F90 中的数据。
program read
implicit none
integer, dimension(4800,15)::countt
integer :: i
integer ,dimension(4800)::sim, infected,id
real,dimension(4800):: epsilon, beta
open(unit = 2, file = '/Dropbox/epi_data.txt', status = 'old', action = 'read')
do i = 1,4800
read(2,*) sim(i), infected(i), beta(i), epsilon(i), countt(i,:)
print*, sim(i), infected(i), beta(i), epsilon(i), countt(i,:)
end do
close(2)
end program read
每当我运行此代码时,我都会收到此错误“Fortran 运行时错误:列表输入中第 3 项的整数错误 "
我在这里缺少什么?
我遇到的另一个问题是,如果我想将训练集保存 100,我应该怎么做。我的意思是,保存 100 行并跳过 100,保存 100 并跳过 100 直到行结束? 所以在我的 4800 行结束时,我将有 2400 个用于训练集。
我需要上传这个问题的数据吗?
【问题讨论】:
-
您可以使用现代 Fortran (2008+) 编译器吗?如果是这样,我建议您使用
newunit说明符而不是硬编码文件标识单元。 -
使用低于 10 的单位编号是危险的。使用 11 或更大或新单位。
-
我对 fortran 很陌生,(我开始尝试这种语言 4 周前),但我会看看你的建议。非常感谢
-
更新代码后,您可能还应该更新错误消息。还是第3条吗?
-
好消息!!确实非常感谢@VladimirF 的说明。我回到错误消息,它现在说的是第 1 项而不是第 3 项,所以我修复了它。代码现在运行良好。