Fortran Coder

查看: 1359|回复: 2
打印 上一主题 下一主题

[文件读写] 读取文件错误

[复制链接]

2

帖子

1

主题

0

精华

新人

F 币
26 元
贡献
10 点
跳转到指定楼层
楼主
发表于 2023-7-5 16:11:40 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
读取一个文件时,出现如下错误:
read_rinex_head.f in:./data/20200100/djig1000.20o                                                                                            
NUM  25 xf_mdat  19
datatypes  L1 P1 C1 L2 P2 D1 D2 S1 S2 L5 C5 D5 S5 L6 C6 D6 S6 L7  

xf_dattyp   1  3  5  2  4  6  7  9 10 11 12 13 14 15 16 17 18 19  0  0
  0  0  0  0
IOSTAT error     -1 occurred decoding
          L5    C5    D5    S5    L6    C6    D6    S6    L7# / TYPES OF OBSERV
in RXHEAD
WARNING:230705:1542:35.0 ./HALO_GNSS/rxhead: IOSTAT error decoding file           L5    C5    D5    S5    L6    C6    D6    S6    L7# / TYPES OF OBSERV ERROR    -1
IOSTAT error     -1 occurred decoding
          C7    D7    S7    L8    C8    D8    S8            # / TYPES OF OBSERV
in RXHEAD
WARNING:230705:1542:35.0 ./HALO_GNSS/rxhead: IOSTAT error decoding file           C7    D7    S7    L8    C8    D8    S8            # / TYPES OF OBSERV ERROR    -1


读取的文件:

[Fortran] 纯文本查看 复制代码
See if data types
          indx = index(line,'# / TYPES OF OBSERV')
          if( indx .gt.0 ) then
* MOD TAH 090114: Allow for more than 9 entries on a line
              read(line,fmt='(i6,9(4x,a2))',iostat=jerr) xf_ndat,
     .                    (datatypes(i),i=1, min(xf_ndat,9)) ! MOD kfhe 130913
              xf_msat = 0
              call report_error('IOSTAT',jerr,'decod',line,0,'RXHEAD')
              if( xf_ndat.gt.xf_maxdat ) then
                  write(*,180) xf_ndat, xf_maxdat
180              format('**DISASTER** Too many observables. ',
     .                   I3,' in current RX file, ',i3,
     .                   ' set in xf_maxdat')
                  stop 'TRACK DISASTER: Too many observables'
              end if
****          See if we need to read next line
              if( xf_ndat.gt. 9 ) then
                  read(obs_lu,'(a)',iostat=ierr) line  
                  call report_error('IOSTAT',ierr,'read',obs_file,
     .                               0,'RXHEAD')
                  read(line,fmt='(6x, 9(4x,a2) )',iostat=jerr)
     .                    (datatypes(i),i=10, xf_ndat)
              endif

* MOD TAH 100717: Changed C1 to type 5 and test later and use only if
*             P1 not available.
* MOD TAH 130425: Added C2 as type 8, used if P2 is not available
              xf_mdat = 0
              xf_dattyp = 0    ! MOD by kfhe 130913: for better
              do i = 1, xf_ndat
                 if (datatypes(i).eq.'L1') xf_dattyp(i) = 1
                 if (datatypes(i).eq.'L2') xf_dattyp(i) = 2
                 if (datatypes(i).eq.'P1') xf_dattyp(i) = 3
                 if (datatypes(i).eq.'P2') xf_dattyp(i) = 4
                 if (datatypes(i).eq.'C1') xf_dattyp(i) = 5               
                 if (datatypes(i).eq.'D1') xf_dattyp(i) = 6
                 if (datatypes(i).eq.'D2') xf_dattyp(i) = 7
                 if (datatypes(i).eq.'C2') xf_dattyp(i) = 8

                 if (datatypes(i).eq.'S1') xf_dattyp(i) = 9       ! MOD kfhe 130913
                 if (datatypes(i).eq.'S2') xf_dattyp(i) = 10
                 if (datatypes(i).eq.'L5') xf_dattyp(i) = 11
                 if (datatypes(i).eq.'C5') xf_dattyp(i) = 12
                 if (datatypes(i).eq.'D5') xf_dattyp(i) = 13


                 if (xf_mdat.lt.xf_dattyp(i))
     .                               xf_mdat = xf_dattyp(i)
              end do
              write(*,fmt='(/,a,a120)')'read_rinex_head.f in:',obs_file
              write(*,fmt='( 2(a,i4) )')'NUM',xf_ndat,' xf_mdat',xf_mdat
              write(*,fmt='(a,20a3)')'datatypes ', datatypes(1:xf_ndat)
              write(*,fmt='(a,20i3)')'xf_dattyp ', xf_dattyp(1:xf_ndat)

          end if
想知道是什么原因?困扰好久了,最近学习老师的程序,小白一枚,求各位大佬帮帮!

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

1963

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1357 元
贡献
574 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

沙发
发表于 2023-7-5 16:49:50 | 只看该作者
  read(line,fmt='(i6,9(4x,a2))',iostat=jerr) xf_ndat,
         (datatypes(i),i=1, min(xf_ndat,9)) ! MOD kfhe 130913
这种格式化read很容易错,数错一个空格就错了。
你可以改为
read(line(1:index-1),*,iostat=jerr) xf_ndat, datatypes(1:min(xf_ndat,9))
注意其他地方也有类似的格式化read,也应做相应的修改

2

帖子

1

主题

0

精华

新人

F 币
26 元
贡献
10 点
板凳
 楼主| 发表于 2023-7-5 19:08:53 | 只看该作者
fcode 发表于 2023-7-5 16:49
read(line,fmt='(i6,9(4x,a2))',iostat=jerr) xf_ndat,
         (datatypes(i),i=1, min(xf_ndat,9)) !  ...

感谢感谢,我去试试
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-4-29 16:14

Powered by Tencent X3.4

© 2013-2024 Tencent

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