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 编辑 ]