回 帖 发 新 帖 刷新版面

主题:[讨论]关于具体问题的求助,大家可以进来讨论讨论

我先给出数据格式:
01-Jan-2005 14:16:28 Lat=-66.92 Lon=155.85 SS V19 H2O VMR  
   Alt(km)    P(mb)    T(K)         VMR          Quality
86.70   2.672E-03 140.57  4.754E-06  2.400E-06
86.40   2.866E-03 141.76  5.180E-06  5.672E-04
86.10   3.070E-03 142.95  5.456E-06  3.480E-06
。。。。。
01-Jan-2005 14:45:36 Lat= 35.11 Lon=246.74 SR V19 H2O VMR  
   Alt(km)    P(mb)    T(K)         VMR          Quality
 83.10   5.094E-03 202.74  1.438E-06  6.602E-07
 82.80   5.355E-03 202.05  1.529E-06  2.164E-06
 82.50   5.631E-03 201.37  1.657E-06  2.489E-06
。。。。。

想要实现的目标:
1、在时间那一行中提取经纬度。我的方法是把这一行看成字符串,把经纬度相应的位置分别存在两个变量里。
2、跳过Alt(km)    P(mb)    T(K)         VMR          Quality 这一行——还不知道怎么实现。
3、我要把下面具体数组的第一列和第四列提取出来,写到一个文件中。矛盾是每一列的行数不确定,不知道能否实现,如果不能,就当做50行处理。
4、下一段时间如上处理,如何可以批量处理。
总的来说就是想分段处理,我写了一部分程序,大家可以一起讨论讨论。谢谢~

回复列表 (共4个回复)

沙发

先把文件一行一行的读进来,读一行处理一行:)
Character*528     LineBuff
Integer                POSLAT        !Lat数据的列位置

...
Do
    Read(FID,'(A512)',END=99)LineBuff                          ! 读一行,如果到文件末尾则退出循环:)
    If(LineBuff(POSLAT-4:POSLAT).EQ.'Lat=')Then          ! 如果是经纬度数据行,则处理之:)
        ...
        Cycle                                                                   ! 处理完毕后直接处理下一行:)
    Else If(LineBuff(1:6).EQ.'   Alt')Then                           ! 如果是Alt(km)……行则跳过:)
        Cycle
    Endif

    ! 其他情况正常处理~~~~
    Read(LineBuff,*)CurAlt,CurP,CurT,CurVMR               ! 读入前4个数据
    ...
End Do
99 Continue

板凳


先谢谢解决了跳过的问题,CYCLE这个想法挺好,就相当于continue,不错。
定义LAT的列位置,然后(POSLAT-4:POSLAT)).EQ.'Lat='也比我原来写的好,谢谢,我还要继续学习。

3 楼

回复2#zyf 6301100提示让我约会后才能有其他操作,但选项是暗的,根本约会不了。大神救救我吧

4 楼

吃了就拉肚子,早两年在湘潭学会的,想戒总是戒不掉,不过我吃槟榔都是吃别人的,呵呵

我来回复

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