Fortran Coder

查看: 52|回复: 5

[文件读写] 读取文件中一个字符串出现的次数

[复制链接]

16

帖子

3

主题

0

精华

入门

F 币
70 元
贡献
45 点
发表于 2020-3-19 00:27:03 | 显示全部楼层 |阅读模式
[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

model1_job1.dat

4.85 KB, 下载次数: 1

回复

使用道具 举报

133

帖子

0

主题

0

精华

版主

World Analyser

F 币
244 元
贡献
256 点

新人勋章美女勋章元老勋章热心勋章规矩勋章管理勋章

QQ
发表于 2020-3-19 09:04:54 | 显示全部楼层
本帖最后由 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

16

帖子

3

主题

0

精华

入门

F 币
70 元
贡献
45 点
 楼主| 发表于 2020-3-19 11:55:24 | 显示全部楼层
其实我想知道 在这个语句描述中if(cStr(:len(C_define))==C_define)then。
cStr(:len(C_define)这个表示的意思,它是指什么?是指从1开始到“C_define”这个字符串长度结束?这个冒号“”前没写数字,是指从默认1开始?还是从“某一个位置”开始?谢谢你的回复。

16

帖子

3

主题

0

精华

入门

F 币
70 元
贡献
45 点
 楼主| 发表于 2020-3-19 11:57:32 | 显示全部楼层
噢!是这样啊,我照着这别人教我的程序来写,都能写错。还有一个问题,我还想知道,
在这个语句描述中if(cStr(:len(C_define))==C_define)then。
cStr(:len(C_define)这个表示的意思,它是指什么?是指从1开始到“C_define”这个字符串长度结束?这个冒号“”前没写数字,是指从默认1开始?还是从“某一个位置”开始?谢谢你的回复。

619

帖子

4

主题

0

精华

大师

农村外出务工人员

F 币
354 元
贡献
113 点

新人勋章爱心勋章水王勋章元老勋章

发表于 2020-3-19 12:00:50 | 显示全部楼层
指从1开始到“C_define”这个字符串长度那么长结束
冒号前面没写数字,默认就是1

16

帖子

3

主题

0

精华

入门

F 币
70 元
贡献
45 点
 楼主| 发表于 2020-3-19 12:17:28 | 显示全部楼层
好的,谢谢。继续学习。外加天天逛帖子
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

QQ|捐赠本站|Archiver|关于我们 About Us|群聊|Fcode

GMT+8, 2020-4-4 23:48

Powered by Discuz! X3.2

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表