【问题标题】:How to read a list of integers from an input line如何从输入行中读取整数列表
【发布时间】:2013-10-09 23:22:07
【问题描述】:

是否可以使用 Fortran 读取包含大量数字(整数)的行?

假设我有一个只有一行的文件

1 2 3

以下程序在一行中读取 3 个整数

program reading 
implicit none
integer:: dump1,dump2,dump3

read(21,*)  dump1,dump2,dump3

end

所以转储1=1转储2=3转储3=3

如果我有一个文件只有一行但有很多整数,比如

1 2 3 4 5 6 7 8 ...  10000

上述程序是否可以在不定义 10000 个变量的情况下工作?

【问题讨论】:

  • 我已经编辑了问题!

标签: fortran fortran90


【解决方案1】:

编辑此答案的第一段可能看起来很奇怪,因为 OP 修改了问题。

您对string 一词的使用最初使我感到困惑,我怀疑它也可能使您感到困惑。将文件中的任何字符或在命令行中键入的字符视为字符串并没有错,但是当所有这些字符都是数字(穿插空格)时,将它们视为integers 会更有用。 Fortran 运行时系统将 负责将一串数字字符转换为整数。

鉴于此,我认为您的问题可能更好地表达为如何从输入行读取整数列表?这是一种方法:

定义一个数组。这里我定义了一个固定大小的数组:

integer, dimension(10**4) :: dump

(我经常使用10**4之类的表达式来避免必须仔细计算0s)。这一步,定义一个数组来捕获所有值,似乎是你缺少的那一步。

要在运行时从终端读取这些值,您可以编写

write(*,*) 'Enter ', 10**4, 'numbers now'
read(*,*) dump

这会将dump(1) 设置为您键入的第一个数字,dump(2) 设置为第二个,一直到10**4-th。不用说,不建议在终端输入该数量的数字,更好的方法是从文件中读取它们。这会带你回到你的

read(21,*) dump

如果发现您的系统对单行的长度施加了一些限制,我不会感到惊讶,因此在尝试读取多达 10**4 整数时可能必须更加复杂,例如逐行读取它们一次100个,类似的东西。这很容易

read(*,*) dump(1:100)

将 100 个整数读入数组的前 100 个元素。编写一个循环来读取 100 行,每行 100 个整数。

【讨论】:

    猜你喜欢
    • 2013-08-22
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 2016-12-05
    • 1970-01-01
    • 1970-01-01
    • 2011-08-18
    • 2014-08-18
    相关资源
    最近更新 更多