Skip a line from text file in Fortran90
Solution 1
You already found the solution but I just wanted to add that you don't even need a dummy variable, just a blank read statement before entering the loop is enough:
open(18, file='m3dv.dat')
read(18,*)
do
...
The other answers are correct but this can improve conciseness and (thus) readability of your code.
Solution 2
Perform a read operation before the do loop that reads whatever is on the first line into a "dummy" variable.
program linereadtest
implicit none
character (LEN=75) ::firstline
integer :: temp,n
!
!
!
open(18,file='linereadtest.txt')
read(18,*) firstline
do n=1,4
read(18,'(i3)') temp
write(*,*) temp
end do
stop
end program linereadtest
Datafile:
This is a test of 1000 things that 10 of which do not exist
50 100 34 566
!ignore the space in between the line and the numbers, I can't get it to format
Related videos on Youtube
osgx
Linux programmer, interested in compilers (with theory and standard-compliance), cryptography, OS and microelectronics design Working deeply with compilers, standard-compliance and OS libraries.
Updated on April 12, 2020Comments
-
osgx about 4 years
I'm writing in fortran (90). My program must read file1, do something with every line of it and write result to file2. But the problem - file1 has some unneeded information in first line.
How can I skip a line from input file using Fortran?
The code:
open (18, file='m3dv.dat') open (19, file='m3dv2.dat') do read(18,*) x tmp = sqrt(x**2 + 1) write(19, *) tmp end do
First line is a combination of text and numbers.
-
jonsca about 13 yearsI think yours assumes the information on the first line of the file is of the same type as the second line.
-
iehrlich about 13 years@jonsca: yes, I do assume, unless other claimed.
-
osgx about 13 yearsNo, first line is not a single number, but a combination of numbers and texts
-
osgx about 13 yearshow can I read
whatever
in fortran? First line have several space-separated strings and numbers. -
jonsca about 13 yearsSo you'd probably be better off reading the top line into a char array of appropriate length, otherwise you'll get a runtime error, I believe (assuming from line 2 on down are
integers
ordouble precision
, etc.) -
osgx about 13 yearsyes (
string number string number
), but universal solution is welcome too. -
jonsca about 13 yearsMake a character array (LEN=100, or whatever). I believe
read
should read until the end of the line. -
iehrlich about 13 years@osgx: the universal solution is to read chars one by one in a loop intil you encounter '\0' char. There also can be a procedure which do this, sorta GetString() in C.
-
jonsca about 13 years@suddnely_me there is no '\0' in Fortan
-
jonsca about 13 yearsThanks, I hadn't realized that.
-
Simon about 13 years@osgx Yes. If you want to skip 3 lines, write it three times.
-
Mohamed about 2 yearsThis is brilliant!