Samanosuke Akechi
Samanosuke Akechi

Reputation: 361

How to read a list of integers from an input line

Is it possible to read a line with numerous numbers(integers) using Fortran?

lets say i have a file with only only line

1 2 3

the following program reads 3 integers in a line

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

read(21,*)  dump1,dump2,dump3

end

so dump1=1 dump2=3 dump3=3

If i have a file with only one line but with numerous integers like

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

is ti possible the above program to work without defining 10000 variables?

Upvotes: 1

Views: 1272

Answers (1)

High Performance Mark
High Performance Mark

Reputation: 78364

EDIT The first paragraph of this answer might seem rather strange as OP has modified the question.

Your use of the term string initially confused me, and I suspect that it may have confused you too. It's not incorrect to think of any characters in a file, or typed at a command-line as a string, but when all those characters are digits (interspersed with spaces) it is more useful to think of them as integers. The Fortran run-time system will take care of translating a string of digit characters into an integer.

In that light I think your question might be better expressed as How to read a list of integers from an input line ? Here's one way:

Define an array. Here I define an array of fixed size:

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

(I often use expressions such as 10**4 to avoid having to count 0s carefully). This step, defining an array to capture all the values, seems to be the one you are missing.

To read those values from the terminal, at run-time, you might write

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

and this will set dump(1) to the first number you type, dump(2) to the second, all the way to the 10**4-th. Needless to say, typing that number of numbers at the terminal is not recommended and a better approach would be to read them from a file. Which takes you back to your

read(21,*) dump

It wouldn't surprise me to find that your system imposes some limit on the length of a single line so you might have to be more sophisticated when trying to read as many as 10**4 integers, such as reading them in lines of 100 at a time, something like that. That's easy

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

will read 100 integers into the first 100 elements of the array. Write a loop to read 100 lines of 100 integers each.

Upvotes: 3

Related Questions