| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 377 人关注过本帖
标题:新手,求读混乱的数据格式
只看楼主 加入收藏
lovechang198
Rank: 1
等 级:新手上路
帖 子:26
专家分:0
注 册:2013-7-19
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:2 
新手,求读混乱的数据格式
x,y=334.81,206.96   lat,lon= 39.80, 116.47  stn=ZBAA,54511 (Beijing-- CHN )
   Visibility                                                                        
      mdate = 13073006,15, rhour =   .0000   value =   .90000000E+02
x,y=332.02,210.19   lat,lon= 39.90, 116.38  stn=----,51001 (Tiananmen-- --- )
   Visibility                                                                        
      mdate = 13073006,15, rhour =   .0000   value =   .90000000E+02
这样一段txt文件,我想要读取其中的lat,lon=、stn=、和value=后面的数值
求帮助或者讲解 如何做?

我知道需要利用instr函数和mid函数,但是具体如何搭配如何做我确实是摸不着边际。
版主帮忙看看哈
2013-07-30 22:36
lowxiong
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:27
帖 子:653
专家分:3402
注 册:2008-5-7
收藏
得分:0 
如果能提供完整的文本和需求举例,应该能找到规律,完成所需。
2013-07-31 07:36
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:20 
x,y=334.81,206.96   lat,lon= 39.80, 116.47  stn=ZBAA,54511 (Beijing-- CHN )
   Visibility                                                                        
      mdate = 13073006,15, rhour =   .0000   value =   .90000000E+02
x,y=332.02,210.19   lat,lon= 39.90, 116.38  stn=----,51001 (Tiananmen-- --- )
   Visibility                                                                        
      mdate = 13073006,15, rhour =   .0000   value =   .90000000E+02


首先 数据分隔标志是什么,就是你这里面 每一节的 数据之间的分隔,每一节都应该包括你所需要的各个字段。
针对每节的处理。
假如这是一节:
x,y=334.81,206.96   lat,lon= 39.80, 116.47  stn=ZBAA,54511 (Beijing-- CHN )
   Visibility                                                                        
      mdate = 13073006,15, rhour =   .0000   value =   .90000000E+02

要取 lat,lon 的值。
先用 instr 查找这个 字段名的起始位置。
然后再用 instr 自这个起始位置 向后搜索。
先找到 等号,找到后,记录开始位置,
再继续搜索,直接搜索到的 字段 为 字母(不含字母 E) 为止,记录结束位置,
把从开始到结束位置的内容截下来,去前后空格就可以了。

这个可以做成一个自定义函数。

程序代码:
Public Function findvalue(cs1 As String, f As String) As String

Dim i As Long, j As Long
Dim l1 As Long, l2 As Long
Dim k As String

l1 = Len(cs1)
l2 = Len(f)
i = InStr(1, cs1, f) + l2

Do
    If Mid(cs1, i, 1) <> "=" Then           '查找等号
        i = i + 1                           '未找到则继续查找
    Else
        Exit Do                             '找到则退出
    End If
Loop While i < l1                           '设置超限停止查找
i = i + 1                                   '找到后,从等号后开始记录位置

j = i + 1                                   '数据最小长度为1,也就决定了开始位置不能等待整个字节长度,最少要小1字节
Do
    k = Mid(cs1, j, 1)                      '取一个字符
    If InStr(1, "01234567890. +-,", k) > 0 Then      '包含在指定的字符串内:数字,小数点,空格,+-
        j = j + 1                           '包含,则继续查找
    ElseIf k = "E" Then                     '不包含时,判断是否是 字母 E ,如果是,继续判断
        If InStr(1, "+-", Mid(cs1, j + 1, 1)) > 0 Then      '如果是字母 E 时,那后面跟着的字符是否是 + - 号
            j = j + 1                       '是科学计数法,则继续查找
        Else
            j = j - 1                       '包含了 E,但不是科学计数法,找到的位置退1
            Exit Do                         '否则不再查找了 ,对应 是否 科学计数法的 +-
        End If
    Else
        j = j - 1                           '字母,结果退1
        Exit Do                             '否则不再查找,对应 包含指定的字符
    End If
Loop While j <= l1                          '设置超限停止,可以查找到最后一个字符

findvalue = Trim(Mid(cs1, i, j - i + 1))      '返回结果值

End Function



[ 本帖最后由 风吹过b 于 2013-7-31 10:31 编辑 ]

授人于鱼,不如授人于渔
早已停用QQ了
2013-07-31 10:29
快速回复:新手,求读混乱的数据格式
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.058675 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved