24小时热门版块排行榜    

查看: 990  |  回复: 7
当前主题已经存档。

gongxd325

至尊木虫 (文坛精英)

[交流] 【求助】Fortran读字符串出错【已完成】

Fortran语句读一个文档中的字符时遇到的奇怪问题

      CHARACTER  TT*80
      READ(1,'(A80)')  TT

当字符TT以"F"开头时就出错,其他字符没有问题,不知道为何?如何解决?

[ Last edited by nono2009 on 2009-10-6 at 09:13 ]
回复此楼

» 猜你喜欢

一个人做点好事并不难难的是一辈子做好事!!!
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

journalemu

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
余泽成(金币+1,VIP+0):支持应助,欢迎常来程序软件版! 10-5 20:57
这么神奇?呵呵,我测试了一下,没有问题。呵呵。不知道楼主是否可以细贴出来。
2楼2009-10-05 19:19:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

vaidi

银虫 (初入文坛)

★ ★
小木虫(金币+0.5):给个红包,谢谢回帖交流
余泽成(金币+1,VIP+0):支持应助,欢迎常来程序软件版! 10-5 22:36
我这也没有问题,楼主真的要把更详细的内容那出来才可以判断啊
3楼2009-10-05 21:54:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gongxd325

至尊木虫 (文坛精英)

谢谢楼上两位。
是这样的,有一组类似于下面形式的数据,每一行上有2个数字或者1个字符串
1.0  3.0
F2.out
HF.out
H2.out
编了个小程序读取,首先以数据形式读A,B,假如出错,则回退一行重新以字符形式读取,语句如下:

      READ(1,*,err=1)A,B
      goto 2
1     backspace (1)
      READ(1,'(A)')TT
      OPEN(3,FILE=TRIM(ADJUSTL(TT)),STATUS='UNKNOWN')
      ...
2     ...

结果发现,读“F”打头的行时出错,而其他均没问题。
研究了一下,问题应该是由于以数据形式读“F”打头的字符出错时无法转向到行号1引起的,不知道该如何解决
一个人做点好事并不难难的是一辈子做好事!!!
4楼2009-10-05 22:54:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gongxd325

至尊木虫 (文坛精英)

PROGRAM test

      IMPLICIT REAL*8 (A-H,O-Z)
      CHARACTER TT*80

      OPEN(1,FILE='in',STATUS='OLD',ERR=99)
      OPEN(2,FILE='ou',STATUS='UNKNOWN')

2     if (EOF(1)) goto 99
      READ(1,*,err=1)A,B
      write(2,'(2F8.2)')A,B
      goto 2
1     backspace (1)
      READ(1,'(A)')TT
      write(2,'(A)')TRIM(ADJUSTL(TT))
      goto 2

99    END
一个人做点好事并不难难的是一辈子做好事!!!
5楼2009-10-05 23:05:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gongxd325

至尊木虫 (文坛精英)

余泽成(金币+0,VIP+0):请耐心等待,求助需设定一定金币奖励! 10-5 23:21
或者先以字符形式读,再从字符中读数字,也同样出错。
      PROGRAM test2

      IMPLICIT REAL*8 (A-H,O-Z)
      CHARACTER TT*80

      OPEN(1,FILE='in',STATUS='OLD',ERR=99)
      OPEN(2,FILE='ou',STATUS='UNKNOWN')

2     if (EOF(1)) goto 99
      READ(1,'(A)')TT
      READ(TT,*,err=1)A,B
      write(2,'(2F8.2)')A,B
      goto 2
1     write(2,'(A)')TRIM(ADJUSTL(TT))
      goto 2

99    END
一个人做点好事并不难难的是一辈子做好事!!!
6楼2009-10-05 23:13:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

nono2009

超级版主 (文学泰斗)

No gains, no pains.

优秀区长优秀区长优秀区长优秀区长优秀版主

这是Fortran 77吗?
7楼2009-10-06 07:40:47
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

gongxd325

至尊木虫 (文坛精英)


nono2009(金币+1,VIP+0):谢谢分享经验。 10-6 09:12
自己解决了。
将READ(TT,*,err=1)A,B改为READ(TT,'(2F)',err=1)A,B就可以了
或者先读字符TT,再根据TT中间有无空格决定是否是数字形式,即
IF (INDEX(TRIM(ADJUSTL(TT)).NE.0) READ(TT,*,err=1)A,B
一个人做点好事并不难难的是一辈子做好事!!!
8楼2009-10-06 08:51:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 gongxd325 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见