如何从输入行读取整数列表

时间:2013-10-09 09:48:08

标签: fortran fortran90

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

假设我有一个只有行

的文件
1 2 3

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

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

read(21,*)  dump1,dump2,dump3

end

所以dump1 = 1 dump2 = 3 dump3 = 3

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

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

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

1 个答案:

答案 0 :(得分:3)

编辑这个答案的第一段似乎很奇怪,因为OP修改了这个问题。

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

从这个角度来看,我认为你的问题可能更好地表达为如何从输入行读取整数列表?这是一种方式:

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

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

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

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

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行。