Fortran Coder

标题: 读取文件中一个字符串出现的次数 [打印本页]

作者: 18229702011    时间: 2020-3-19 00:27
标题: 读取文件中一个字符串出现的次数
[Fortran] 纯文本查看 复制代码
program find_close
  implicit none
  integer::i=0,k
  character(len=512) ::  cStr
  character,parameter::C_define='define'
  
  
   Open(12,File="model1_job1.dat")
  Do
    read(12,'(a512)',ioStat=k) cStr            
    if(k/=0) exit
    cStr = adjustl(cStr)
    if(cStr(:len(C_define))==C_define)then   
      i=i+1
   endif
  end do
  write(*,*)i
  close(12)
end program


在文件中“define”明明只出现了3次,但为什么我的代码最后i是4次
但如果我把含define那部分单独复制出来放在另外一个文件中(如图),再用这个程序读取就是3次,这是为什么?

微信截图_20200319002415.png (28.57 KB, 下载次数: 366)

微信截图_20200319002415.png

model1_job1.dat

4.85 KB, 下载次数: 1


作者: kyra    时间: 2020-3-19 09:04
本帖最后由 kyra 于 2020-3-19 09:06 编辑

character,parameter::C_define='define'
改为
character(len=*),parameter::C_define='define'

如果不改的话,C_define 没有定义长度,则长度为1。
所以,虽然赋值为 'define',但实际的值是 'd'
那么程序的作用就变成了:“搜索d开头的行”


而文件中的 dist loads 也满足了要求。
所以 i 就是 4,而不是 3


作者: 18229702011    时间: 2020-3-19 11:55
其实我想知道 在这个语句描述中if(cStr(:len(C_define))==C_define)then。
cStr(:len(C_define)这个表示的意思,它是指什么?是指从1开始到“C_define”这个字符串长度结束?这个冒号“”前没写数字,是指从默认1开始?还是从“某一个位置”开始?谢谢你的回复。

作者: 18229702011    时间: 2020-3-19 11:57
噢!是这样啊,我照着这别人教我的程序来写,都能写错。还有一个问题,我还想知道,
在这个语句描述中if(cStr(:len(C_define))==C_define)then。
cStr(:len(C_define)这个表示的意思,它是指什么?是指从1开始到“C_define”这个字符串长度结束?这个冒号“”前没写数字,是指从默认1开始?还是从“某一个位置”开始?谢谢你的回复。


作者: 楚香饭    时间: 2020-3-19 12:00
指从1开始到“C_define”这个字符串长度那么长结束
冒号前面没写数字,默认就是1
作者: 18229702011    时间: 2020-3-19 12:17
好的,谢谢。继续学习。外加天天逛帖子




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2