回 帖 发 新 帖 刷新版面

主题:fortran如何读取文件中指定位置的数据

请教
我想要读取fn下面的一部分数据,从fn下面的一个等号开始到第二个等号结束,数据中有可能有缺测,也有可能出现字符,应该怎么做啊,下面是文件的一部分。附件是完整数据
..........................
000 000
000 000
000 000=
G=
FN
352035 036016 346018 355040 348034 340032
337024 335027 329021 334030 292018 349026
359023 358009 309012 170017 121012 176014
197013 152011 187007 165005 113009 358011.
350026 336021 350030 348044 329032 347030
349026 349030 345028 351020 336036 328022
348029 350019 178011 247023 243038 289026
324039 318036 326034 348060 346036 329050=
...........................................................................
354021 332017 348028 345039 334027 348026
346029 347030 347029 352025 339038 333028
347032 342018 234012 249019 245040 313036
319036 324043 324039 347053 344041 329035=
..............................................................................

回复列表 (共17个回复)

11 楼

program main  
     implicit none 
     integer i,j
     integer,parameter:: m=123,n=6
     real*4 ::a(m,n)
     character::b(n)
     integer::c(m,n)
  
     open(2,file='200901.txt')
     open(3,file='200901-2.txt')
         do i=1,m
            read(2,*)(b(j),j=1,6)
    write(*,*)b(:)
    pause
                do j=1,n
                  if(trim(b(j))=='//////')then
                   b(j)='999999'
                elseif(trim(b(j))=='PPC???')then
                   b(j)='-99999'
                endif
                read(b(j),*)a(i,j)
!                c(i,j)=(a(i,j)/1000)
             write(*,*)a(i,:)
    pause
          enddo
        enddo
     close(2)
     close(3)
     
      stop
      end program

12 楼

character::b(n)
没有设置字符串长度,默认一个字节,只能表示一个字符

13 楼

非常感谢:)

14 楼

为什么b()读出来的是正确的,a()每行只有一个数是对的,其他的显示是0?

15 楼

read(b(j),*)a(i,j)
改为:
read(b(j),*)a(i,:)

16 楼

Fortran是按行读的,你可以在不需要的行数仅仅用read读一下,不存数据。自己需要的行数把书读读进去。这个需要你先把自己数据的排列形式弄明白。祝你好运!

17 楼

谢谢:)

我来回复

您尚未登录,请登录后再回复。点此登录或注册