“"e:\1.dat” 文件大致格式是“ 1 2.2 3.33 4.444”,想要调取“1”,循环从第一个空格开始调,如果调出的是空格,则往后顺延一位,直到调出的不是空格,而是“1”。由于是vb初学者,循环语句还没有学好,下面是自己搞出的程序,运行一直都是空白,求大侠们指点。Private Sub Command1_Click()
Dim lngFn As Long, strT As String
lngFn = FreeFile
Open "e:\1.dat" For Binary As #lngFn
strT = Space(LOF(lngFn))
Get #1, , strT
Close #lngFn
Dim a As Long
sArr = Split(strT, vbCrLf)
a = 1
txt1.Text = Split(sArr(0), " ")(a)
For a = 1 To 6
If (txt1.Text = "") Then
End If
Next a
End Sub
Dim lngFn As Long, strT As String
lngFn = FreeFile
Open "e:\1.dat" For Binary As #lngFn
strT = Space(LOF(lngFn))
Get #1, , strT
Close #lngFn
Dim a As Long
sArr = Split(strT, vbCrLf)
a = 1
txt1.Text = Split(sArr(0), " ")(a)
For a = 1 To 6
If (txt1.Text = "") Then
End If
Next a
End Sub
每一行的数据,再按空格,拆成数组。
数组第一个就是1啊。
Dim lngFn As Long, strT As String, sArr() As String, i As Long lngFn = FreeFile
Open "e:\1.dat" For Input As #lngFn
Do Until EOF(lngFn)
Line Input #lngFn, strT
strT = Trim(strT)
Do While InStr(strT, Space(2))
strT = Replace(strT, Space(2), Space(1))
Loop
sArr = Split(strT, Space(1))
If sArr(0) = "1" Then
MsgBox "'1' is found."
Exit Do
End If
Loop
Close #lngFn
End Sub
其实我的数据格式是图片上的这种,因为我想固定调取第二列cloud的数值,但由于有的数占3位,有的占4位,我用
txt1.Text = Split(sArr(2), " ")(12)时可以调出四位的10.0,但是想要调取三位的9.7,又变成Split(sArr(2), " ")(13)。所以想用循坏语句,从FH列后的第一个空格(txt1.Text = Split(sArr(2), " ")(8))开始调,如果是空格就继续调后一位,如果不是空格就把值赋给txt1.TEXT。求指点~~~~
strT = Replace(strT, Space(2), Space(1))
Loop将连续的多个空格替换为 1 个空格,然后切分。
对于读取到的每一行内容 strT:
Dim strT As String
Dim CV As Double ' CV的类型用String还是Double,按你的需要来定
Dim p1&, p2 As LongstrT = "xxxxxxxx" ' strT 的值为每行数据的内容
p1 = InStr(W, strT, " ")
' 这儿W的值,是指第1列数据FH占用的宽度。
' 比如第1行数据:0的前面有3空格、再加数值0,共4个字符,W就为4;
' 因数值后面还有若干空格,W为5、为6也行,但不要“增加太多”。
p2 = InStr(InStr(p1, strT, "."), strT, " ")
' 取第二列 Cloud 的数据:
CV = Val(Mid$(strT, p1, p2 - p1)) ' 取“数值”值用这句 Double
CV = LTrim$(Mid$(strT, p1, p2 - p1)) ' 取“文本”值用这句 String
都可以直接用 Mid$( strT, ps, W) 的形式,把数据“抠出来”,而那几次 Instr()的函数调用是不必要的。
ps 就是从第几个字符开始,W 就是取多少字符;
只要大概把文件内容看一下,就可以选择出比较合理的 ps和W 的值,确保不会把每个字段的“有效内容”截掉。
然后,配合 Trim$() 或Val() 把“抠出来的数据”处理一下就行了:
如果要“文本结果”就用trim 去掉首尾的空格,如果要“数值结果”就用 Val 转换成数值。
trim(mid(行内容变量,起启位置,长度))
哪列取不出来啊?