24小时热门版块排行榜    

CyRhmU.jpeg
查看: 860  |  回复: 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的回帖

tjyl

金虫 (正式写手)

★ ★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
nono2009(金币+2,VIP+0):谢谢应助! 11-18 14:36
intel的编译器应该这样可以的,不过gfortran不行,可能eof返回的类型不对的原因。
另外可以使用iostat来判断。
open(15, file='foo.txt')
do
   read(fh, iostat=stat) buf
   if (stat /= 0) exit
   ! process buf
end do
close(15)

[ Last edited by tjyl on 2009-11-18 at 13:43 ]
11楼2009-11-18 13:28:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 25 个回答

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的回帖

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的回帖
普通表情 高级回复(可上传附件)
信息提示
请填处理意见