【问题标题】:Error in Reading a txt file: Bad integer for item in list input读取 txt 文件时出错:列表输入中项目的整数错误
【发布时间】: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 项,所以我修复了它。代码现在运行良好。

标签: fortran fortran90


【解决方案1】:

您正尝试将第三列中的值读取为整数值(infected 的类型为 integer)。但是,1.50000000 等未格式化为整数(它们是实数)。因此错误。

您可能需要更改列的顺序或读取它们的方式,即删除id(i),

【讨论】:

  • 谢谢 Alexander Vogt,我确实修复了您的建议,并在此处更新了代码,但问题仍然存在。
  • 非常感谢@Alexander。根据您的初步反馈,该代码现在可以正常工作。
【解决方案2】:

您必须重新格式化您的 *.txt 文件。

Fortran 使用点“。”作为小数分隔,例如 1.50000000 是“1.5”,而不是“150000000”。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-15
  • 2021-03-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多