24小时热门版块排行榜    

CyRhmU.jpeg
查看: 861  |  回复: 24
当前主题已经存档。

tpp001

金虫 (著名写手)

[交流] 【求助】新手求助,不知道文件中数据有多少行怎么半?

新手求助!!
我要写一段程序,读取文件中的每一行数据,调用子程序进行计算,可是我并不知道这个文件有多少行,这段程序应该怎么写,请大家帮忙...
program main
implicit none
integer i, nrow ! nrow是文件的行数
character*10 atomname
open(1,file='co2.gro',status='unknown')
do i=1, nrow !读取文件中的每一行数据,可是我并不知道这个nrow的具体数值.
read(1,*) atomname,x(i),y(i),z(i)
if (atomname .eq. 'cb') then
call sub(x(i),y(i),z(i))
请大家帮忙,另外我想读取每一行数据后,调用子程序进行运算,我想知道把文件中的每一行数值赋值给子程序sub(x,y,z),像我这样写可以吗??
回复此楼
迷茫在知识的海洋里,需要你的指导。thankyou
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
余泽成(金币+1,VIP+0):谢谢参与应助! 11-17 16:55
可以这么写:
L=1
10  CONTINUE
READ(UNIT, *,END=120) A(L),B(L)
CALL SUB(A(L),B(L))
L=L+1
GOTO 10
120  CONTINUE
2楼2009-11-17 16:19:06
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

至尊木虫 (文坛精英)

会冒泡之超级潜水员

文献杰出贡献

senlia(金币+0,VIP+0):偶尔用用goto 其实满好的 比用其它语句代替反而要明白些 11-17 21:18
少用GOTO
3楼2009-11-17 16:51:18
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tpp001

金虫 (著名写手)

引用回帖:
Originally posted by maomao1210 at 2009-11-17 16:19:
可以这么写:
L=1
10  CONTINUE
READ(UNIT, *,END=120) A(L),B(L)
CALL SUB(A(L),B(L))
L=L+1
GOTO 10
120  CONTINUE

我是新手 能不能详细的说一下,另外这里的END=120是什么意思,有点晕,看了这段
迷茫在知识的海洋里,需要你的指导。thankyou
4楼2009-11-17 17:02:53
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖交流
引用回帖:
Originally posted by at 2009-11-17 16:51:
少用GOTO

少用不是不用,不然咋不直接把这个功能去掉呢?哈哈。
阁下给个妙招呀。
5楼2009-11-17 19:35:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

senlia

木虫 (小有名气)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
nono2009(金币+1,VIP+0):辛苦了! 11-17 23:57
引用回帖:
Originally posted by tpp001 at 2009-11-17 17:02:

我是新手 能不能详细的说一下,另外这里的END=120是什么意思,有点晕,看了这段

如果不用 end=120 这样的参数设置 那么如果读文件读到数据没有了还往下读的话就会出错 但是如果用了 那就表示 如果读文件出错了 就跳到120指定的语句
书到用时方恨少, 天涯何处无芳草.
6楼2009-11-17 20:25:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tjyl

金虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖交流
你这样不行的
并没有判断是否到达文件末尾。这样写和直接用死循环没有区别。
引用回帖:
Originally posted by maomao1210 at 2009-11-17 16:19:
可以这么写:
L=1
10  CONTINUE
READ(UNIT, *,END=120) A(L),B(L)
CALL SUB(A(L),B(L))
L=L+1
GOTO 10
120  CONTINUE

7楼2009-11-18 13:03:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tjyl

金虫 (正式写手)

★ ★
nono2009(金币+2,VIP+0):谢谢应助! 11-18 13:21
使用函数EOF。 eof(file_id)如果为真则说明到达文件末尾了,就不读了。
下面是编译器手册上的说明和范例:

EOF

Inquiry Intrinsic Function (Generic): Checks whether a file is at or beyond the end-of-file record.
Syntax

result = EOF (unit)

unit
       

(Input) Must be of type integer. It represents a unit specifier corresponding to an open file. It cannot be zero unless you have reconnected unit zero to a unit other than the screen or keyboard.
Results

The result type is default logical. The value of the result is .TRUE. if the file connected to unit is at or beyond the end-of-file record; otherwise, .FALSE..
Example

! Creates a file of random numbers, reads them back

REAL x, total

INTEGER count

OPEN (1, FILE = 'TEST.DAT')

DO I = 1, 20

CALL RANDOM_NUMBER(x)

WRITE (1, '(F6.3)') x * 100.0

END DO

CLOSE(1)

OPEN (1, FILE = 'TEST.DAT')

DO WHILE (.NOT. EOF(1))

count = count + 1

READ (1, *) value

total = total + value

END DO

100 IF ( count .GT. 0) THEN

WRITE (*,*) 'Average is: ', total / count

ELSE

WRITE (*,*) 'Input file is empty '

END IF

STOP

END
See Also
ENDFILE
BACKSPACE
REWIND
引用回帖:
Originally posted by tpp001 at 2009-11-17 16:08:
新手求助!!
我要写一段程序,读取文件中的每一行数据,调用子程序进行计算,可是我并不知道这个文件有多少行,这段程序应该怎么写,请大家帮忙...
program main
implicit none
integer i, nrow ! nrow是文件的行数 ...

8楼2009-11-18 13:05:37
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tjyl

金虫 (正式写手)

★ ★
nono2009(金币+2,VIP+0):谢谢应助! 11-18 13:21
program main
implicit none
integer i, nrow ! nrow是文件的行数
character*10 atomname
open(1,file='co2.gro',status='unknown')
i=1
do while (.not. eof(1))
read(1,*) atomname,x(i),y(i),z(i)
if (atomname .eq. 'cb') then
call sub(x(i),y(i),z(i))
i=i+1
end do


end program
没有测试过,自己试试吧。
引用回帖:
Originally posted by tpp001 at 2009-11-17 16:08:
新手求助!!
我要写一段程序,读取文件中的每一行数据,调用子程序进行计算,可是我并不知道这个文件有多少行,这段程序应该怎么写,请大家帮忙...
program main
implicit none
integer i, nrow ! nrow是文件的行数 ...

[ Last edited by tjyl on 2009-11-18 at 13:10 ]
9楼2009-11-18 13:08:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

maomao1210

金虫 (正式写手)


小木虫(金币+0.5):给个红包,谢谢回帖交流
引用回帖:
Originally posted by tjyl at 2009-11-18 13:03:
你这样不行的
并没有判断是否到达文件末尾。这样写和直接用死循环没有区别。


你试了嘛?呵呵,咋知道不行呢?
10楼2009-11-18 13:19:01
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 tpp001 的主题更新
普通表情 高级回复(可上传附件)
信息提示
请填处理意见