Read start: end of file error in fortran

  • Context: Fortran 
  • Thread starter Thread starter agalya
  • Start date Start date
  • Tags Tags
    Error File Fortran
Click For Summary

Discussion Overview

The discussion revolves around a Fortran programming issue related to reading multiple files of varying lengths. Participants are addressing a specific error encountered when attempting to read data from the 40th file, which has fewer lines than expected. The scope includes technical troubleshooting and potential solutions for file reading in Fortran.

Discussion Character

  • Technical explanation
  • Debate/contested

Main Points Raised

  • One participant describes a Fortran program that reads 79 files, noting an error when reading the 40th file, which has 1163 lines.
  • Another participant questions whether the files are opening correctly and suggests that the program's attempt to read 2000 lines may be problematic given the actual lengths of the files.
  • There is a suggestion to turn off error checking on the file read or to include a header line in each file indicating the number of lines, allowing for dynamic reading based on actual file length.
  • A participant recommends writing out the files immediately after reading to verify the data being processed.
  • Concerns are raised about the format specifier used in the read statement, questioning whether '51a' is appropriate and suggesting alternatives like '51a1', '51a2', or '51a4'.

Areas of Agreement / Disagreement

Participants express differing views on the cause of the error and potential solutions, indicating that there is no consensus on the best approach to rectify the issue.

Contextual Notes

There are limitations regarding the assumptions about file lengths and the format specifiers used in the read statements, which may affect the program's behavior.

agalya
Messages
9
Reaction score
0
Hi all,

do i = 1, 79
open(2,file=afiln(i),status='old')
do k = 1,11
read(2,'(51a)')astr1
enddo
do j=12,2000
read(2,22,end=23,err=23)iyr,imn,id,ih,imt,flx
write(7,*)i,j
obstim = float(id)*1440.0+float(ih)*60.0+float(imt)
if(obstim .eq. pt(i).and. flx.ne.1.0E33)then
if(flx .ge. 1.0)then
write(3,*)afiln(i),j,imn,id,ih,imt,flx
endif
endif
enddo
23 write(*,*)i
enddo

In the above program I'm reading 79 files of different length, no file is 2000 lines length. but at 40th file (length 1163) it isays read start: end of file.
Can somebody please help me rectufy this problem
Thanks
 
Technology news on Phys.org
Are you sure that your files are opening correctly? I thought that I've tried opening a file via string array and it not working real well.

Also, you may have problems since the files aren't always at least 2000 lines. You are trying to read data 2000 lines down on each file, for which there may not be there.

There are two ways around this. First, I believe you can basically "turn off" the error checking on the file read. It's an argument in the READ statement.

The better way would be to include a header line in each file stating how many lines of data that file contains. Then, instead of looping from j=12,2000, you loop from j=12,n.
 
HI

Thanks for the reply, but none of the file is having 2000 lines(1450 lines only), up 40th file they go properly. I'm having problem for this file only(1163 lines). Dont understand why it is happening to this file alone since the "end" statement in the read works properly for other files.

* files are opening properly

thanks and regards
 
Directly after you read the file, write it out using the exact same code (substituting READ for WRITE) and see what files are being written. You need to find out exactly what's happening in the code, and that's the best way. Are you actually reading what you think you are?
 
agalya said:
Hi all,

do i = 1, 79
open(2,file=afiln(i),status='old')
do k = 1,11
read(2,'(51a)')astr1
enddo
do j=12,2000
read(2,22,end=23,err=23)iyr,imn,id,ih,imt,flx
write(7,*)i,j
obstim = float(id)*1440.0+float(ih)*60.0+float(imt)
if(obstim .eq. pt(i).and. flx.ne.1.0E33)then
if(flx .ge. 1.0)then
write(3,*)afiln(i),j,imn,id,ih,imt,flx
endif
endif
enddo
23 write(*,*)i
enddo

In the above program I'm reading 79 files of different length, no file is 2000 lines length. but at 40th file (length 1163) it isays read start: end of file.
Can somebody please help me rectufy this problem
Thanks

Don't know what your compiler thinks of 51a format...
shoudn't it be 51a1 or 51a2 or 51a4?
 

Similar threads

  • · Replies 8 ·
Replies
8
Views
2K
  • · Replies 12 ·
Replies
12
Views
3K
  • · Replies 5 ·
Replies
5
Views
5K
  • · Replies 19 ·
Replies
19
Views
7K
  • · Replies 12 ·
Replies
12
Views
2K
  • · Replies 5 ·
Replies
5
Views
2K
  • · Replies 1 ·
Replies
1
Views
4K
  • · Replies 4 ·
Replies
4
Views
9K
  • · Replies 2 ·
Replies
2
Views
9K
  • · Replies 2 ·
Replies
2
Views
25K