(建议版主把这个帖子移动到编程版fortran专题下)
下面的方法虽然解决不了我的问题,不过也是很有价值的。
From: http://www.tek-tips.com/viewthread.cfm?qid=1315394&page=1
How to read data from specific line in a file
sougandh (TechnicalUser)
21 Dec 06 12:11
Hi,
Here is my problem. My file is in the following format.
It has 5 columns with first two being integers and 3-5 are floating values.
file format (similar format with different values)
col 1 col 2 col 3 col 4 col 5
5001 1001 12.34 11.34 43.454
5001 1002 11.54 65.43 65.234
5001 1003 12.54 54.64 65.778
. . . . .
. . . . .
5001 1099 14.65 16.53 12.568
5001 1100 13.65 13.54 12.545
5002 1001 12.34 11.34 43.454
5002 1002 11.54 65.43 65.234
5002 1003 12.54 54.64 65.778
. . . . .
. . . . .
5002 1099 13.45 51.15 61.542
5002 1100 13.65 13.54 12.545
so on...
That means, for each number in column 1 i have 100 values. Or i should say the column 1 number doesnt change for for 100 rows and then it increases. Infact my original file has (5760 x 4633) rows.
Now here is how i need to read it:
There is a variable 'crhr' which returns a value which corresponds to any of the values in column 1. For example it may be 5002 or 5050 or anything. So when this variable has a value of 5002 what i need is i should be able to read the rows corresponding to the number 5002 and store it in an array.
My problem now is how do i make Fortran start reading the file from a particular line based on the value returned by the variable 'crhr'
thanks
sougandh
-----------------------------------------------------
Helpful Member!xwb (Programmer)
21 Dec 06 16:30
Are all the lines the same size (in characters). If so, then you can use formatted reads on direct access files
CODE
program main
integer FHAND, TMAX, RMAX
parameter (TMAX=10, RMAX=5, FHAND=88)
real t(TMAX)
integer reqd(RMAX)
data reqd/ 1, 2, 16, 8, 4 /
! file - the data file
! status - always old
! form - formatted for human readable data
! - unformatted for binary data
! access - always direct. The alternative is sequential
! recl - number of characters incl LF
open (FHAND, &
file='data.txt', &
status='old', &
form='FORMATTED', &
access='direct', &
recl=51)
do i = 1, RMAX
! Read record reqd(i)
read (FHAND, '(10F5.1)', rec=reqd(i)) (t(j), j = 1, TMAX)
write (*, '(10F5.1)') (t(j), j = 1, TMAX)
enddo
close (FHAND)
stop
end program |