2013-10-09 30 views
1

是否可以使用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个变量而工作?

+0

我编辑了这个问题! –

回答

3

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

您对string这个术语的使用最初让我困惑,我怀疑它也可能让您感到困惑。考虑文件中的任何字符或在命令行中输入为字符串是没有错的,但是当所有这些字符都是数字(用空格散布)时,将它们想象为integers会更有用。 Fortran运行系统将 负责将一串数字字符转换为整数。

在这种情况下,我认为你的问题可能会更好地表示为如何从输入行读取整数列表?这里有一种方法:

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

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

(I经常使用表达式诸如10**4,以避免必须仔细计数0多个)。这一步,定义一个数组来捕获所有的值,似乎是你所缺少的。

从终端读取这些值,在运行时,你可能会写

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

,这将设置dump(1)你键入的第一个数字,dump(2)到第二,一路到10**4个。不用说,不建议在终端上输入这些数字,更好的方法是从文件中读取它们。这需要你回到你的

read(21,*) dump 

它不会让我感到吃惊地发现,你的系统强加给一个单一的线的长度极限一些,所以你可能会试图读取多达10**4时要更加复杂整数,例如一次读100行,就像这样。这很容易

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

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