osgx
osgx

Reputation: 94345

Skip a line from text file in Fortran90

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.

Upvotes: 9

Views: 28413

Answers (3)

Simon
Simon

Reputation: 32943

One possible solution has already been presented to you which uses a "dummy variable", 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.

Upvotes: 17

jonsca
jonsca

Reputation: 10381

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

Upvotes: 1

iehrlich
iehrlich

Reputation: 3592

open (18, file='m3dv.dat')
open (19, file='m3dv2.dat')
read(18,*) x // <---

do
  read(18,*) x
  tmp = sqrt(x**2 + 1)
  write(19, *) tmp
end do

The line added just reads the first line and then overwrites it with the seconde on the first iteration.

Upvotes: 0

Related Questions