24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 1040  |  回复: 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 的主题更新
普通表情 高级回复 (可上传附件)
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 070305高分子化学与物理 304分求调剂 +6 c297914 2026-03-28 6/300 2026-03-28 22:34 by muchong357
[考研] 332求调剂 +5 蕉蕉123 2026-03-28 5/250 2026-03-28 20:50 by 唐沐儿
[考研] 085600,材料与化工321分求调剂 +9 大馋小子 2026-03-28 9/450 2026-03-28 14:56 by 神马都不懂
[考研] 347求调剂 +3 山顶见α 2026-03-25 3/150 2026-03-28 14:13 by 唐沐儿
[考研] 085405 考的11408求各位老师带走 +3 Qiu学ing 2026-03-28 3/150 2026-03-28 09:19 by 乐呵呵的追梦人
[考研] 0703化学/290求调剂/本科经历丰富/工科也可 +9 丹青奶盖 2026-03-26 10/500 2026-03-28 07:45 by barnett0632
[考研] 352分 化工与材料 +5 海纳百川Ly 2026-03-27 5/250 2026-03-28 03:39 by fmesaito
[考研] 285求调剂 +4 AZMK 2026-03-27 7/350 2026-03-27 20:59 by AZMK
[考研] 265求调剂11408 +3 刘小鹿lu 2026-03-27 3/150 2026-03-27 20:53 by nihaoar
[考研] 一志愿 西北大学 总分282 英语一62 求调剂 +7 18419759900 2026-03-25 8/400 2026-03-27 16:38 by 18419759900
[考研] 085600,材料与化工321分调剂 +4 大馋小子 2026-03-27 6/300 2026-03-27 14:11 by 松花缸1201
[考研] 312求调剂 +9 上岸吧ZJY 2026-03-22 13/650 2026-03-27 11:24 by sanrepian
[考研] 342求调剂 +3 加油a李zs 2026-03-26 3/150 2026-03-27 00:29 by wxiongid
[考研] 333求调剂 +6 wfh030413@ 2026-03-23 6/300 2026-03-26 22:45 by 学员8dgXkO
[考研] 081200-11408-276学硕求调剂 +3 崔wj 2026-03-26 3/150 2026-03-26 19:57 by nihaoar
[考研] 303求调剂 +6 蓝山月 2026-03-25 6/300 2026-03-25 22:47 by 418490947
[考研] 293求调剂 +7 加一一九 2026-03-24 7/350 2026-03-25 12:02 by userper
[考研] 一志愿南航材料专317分求调剂 +5 炸呀炸呀炸薯条 2026-03-23 5/250 2026-03-24 16:52 by 星空星月
[考研] 材料/农业专业,07/08开头均可,过线就行 +3 呵唔哦豁 2026-03-23 4/200 2026-03-23 22:30 by 汪!?!
[论文投稿] 急发核心期刊论文 +3 贤达问津 2026-03-23 5/250 2026-03-23 17:13 by 妹子不好惹
信息提示
请填处理意见