意为提取第23行的字符。
代码如下:Private Sub Command1_Click()
    ComDiaReader.ShowOpen
    filePath = ComDiaReader.FileName
    Open filePath For Input As #1
    Do While Not EOF(1)
        Line Input #1, dataStr
        i = i + 1
        Select Case i
        Case 23
        Text1.Text = dataStr
        End Select
    Loop
    Close #1
    
End Sub
其实这段代码,我不是十分理解的。
dataStr不是把所有的行都赋值给dataStr的?
那后面的循环好像无意义。
而且循环只执行了一次,不知道为什么。
文件片段(开头)如下:
#cP1992  2 16  0  0  0.00000000      96 d     IGS05 FIT  SIO                    
##  632      0.00000000   900.00000000 48668 0.0000000000000                    
+   16   G02G03G06G11G12G13G14G15G16G17G18G19G20G21G23G24  0                    
+          0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0                    
+          0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0                    
+          0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0                    
+          0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0                    
++         0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0                    
++         0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0                    
++         0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0                    
++         0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0                    
++         0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0                    
%c G  cc GPS ccc cccc cccc cccc cccc ccccc ccccc ccccc ccccc                    
%c cc cc ccc ccc cccc cccc cccc cccc ccccc ccccc ccccc ccccc                    
%f  1.2500000  1.025000000  0.00000000000  0.000000000000000                    
%f  0.0000000  0.000000000  0.00000000000  0.000000000000000                    
%i    0    0    0    0      0      0      0      0         0                    
%i    0    0    0    0      0      0      0      0         0                    
/*                                                                              
/*                                                                              
/*                                                                              
/* PCV:IGS05      OL/ALL:FES2004    Y NONE         YN ORB:CoN CLK:CoN           
*  1992  2 16  0  0  0.00000000                                                 
PG02 -23597.590869 -12667.682039   1554.063157 999999.999999                    
PG03   1460.140660  22088.715168  14061.744256 999999.999999                    
PG06 -23940.436948   1723.694818  11368.771562 999999.999999                    
PG11  11063.677380 -21676.635131  11463.607676 999999.999999                    
PG12 -10072.047715  14169.403659 -19734.439331 999999.999999                    
PG13 -12481.585169   2624.089443 -23212.852880 999999.999999                    

解决方案 »

  1.   

    line input #是只读取一行的……
    参考vb帮助。
      

  2.   

    Option ExplicitPrivate Sub Command1_Click()
        Dim FileNumber As Integer
        Dim sFile() As String, S As String
        Dim FileByte() As Byte
        
        FileNumber = FreeFile
        ' 设置“CancelError”为 True
        ComDiaReader.CancelError = True
        On Error GoTo ErrHandler
        ' 设置标志
        ComDiaReader.Flags = cdlOFNHideReadOnly
        ' 设置过滤器
        ComDiaReader.Filter = "All Files (*.*)|*.*|Text Files" & "(*.txt)|*.txt|"
        ' 指定缺省的过滤器
        ComDiaReader.FilterIndex = 2
        ' 显示“打开”对话框
        ComDiaReader.ShowOpen
        ' 显示选定文件的名字
        Open ComDiaReader.FileName For Binary As #FileNumber
        ReDim FileByte(LOF(FileNumber) - 1)
        Get #FileNumber, , FileByte
        S = StrConv(FileByte, vbUnicode)
        sFile = Split(S, vbCrLf)
        Text1.Text = sFile(22)
        Close #FileNumber
        Erase sFile
        Exit Sub
        
    ErrHandler:
        ' 用户按了“取消”按钮
        Exit Sub
    End Sub
      

  3.   

    Private Sub Command1_Click()
        Open "c:\222.txt" For Input As #1
        Do While Not EOF(1)
            Line Input #1, dataStr
            i = i + 1
            Select Case i
            Case 23
            Text1.Text = dataStr
            End Select
        Loop
        Close #1
    End Sub试试这个,把文件名换了……
      

  4.   

    Private Sub Command1_Click()
        Open "c:\222.txt" For Input As #1
        i=1
        Do While Not EOF(1)
            Line Input #1, dataStr '读一行,下次读的时候,上次读到的被抛弃
            if i=23 then
                 exit do
            end if
            i = i + 1
            dataStr ="",必须,否则,读到的可能不是23行的数据,如果行数小于23则会将最后一行数据留在里面
        Loop
        Close #1
    End Sub
      

  5.   

    本来就是一行一行的读取,你要是找到了要退出就加个eixt do:
            Select Case i
            Case 23
            Text1.Text = dataStr
            exit do
            End Select
    相似的例子:
    '打开文件
    With CommonDialog1
      .Flags = .Flags Or cdlOFNHelpButton
      .Flags = .Flags Or cdlOFNExplorer
      .Flags = .Flags Or cdlOFNFileMustExist
      .DialogTitle = "请选择一个文件:"
      .Flags = .Flags Or cdlOFNNoChangeDir
      '.Filter = "所有文件(*.*)|*.*"
      .Filter = "航迹点文件(.TRK)|*.TRK"
      .ShowOpen
      If Len(.FileName) = 0 Then
        Exit Sub
      End If
    End With
    name2 = CommonDialog1.FileName
    End Sub
    Private Sub Command2_Click()
    On Error GoTo errmade
    Dim i, t, n As Long
    Dim a, b, c, d, e, aa As String
    Dim a1, b1, c1, d1, e1 As Double
      If Len(CommonDialog1.FileName) = 0 Then
        MsgBox "请打开所需的源文件!"
        Exit Sub
      End If
    Rem one stand GPS and one move GPS
    Open name1 For Input As #1
    Open name2 For Input As #2
    Open "out2.txt" For Output As #3
    Open "out1.txt" For Output As #4
    For i = 1 To 2
      Do While Not EOF(i)
        Line Input #i, aa
        If Mid(aa, 4, 1) = "N" Then
          a = Mid(aa, 5, 10)
          b = Mid(aa, 17, 11)
          c = Mid(aa, 39, 2)
          d = Mid(aa, 42, 2)
          e = Mid(aa, 45, 2)
          a1 = Val(a): b1 = Val(b): c1 = Val(c): d1 = Val(d): e1 = Val(e):
          If c1 > 20 Then c1 = c1 - 24
          t = 3600 * c1 + 60 * d1 + e1
          Write #(i + 2), a1, b1, t
        End If
      Loop
    Next i
    Close
      

  6.   

    主要问题是好像sp3文件用txt打开后各种不对- -棘手,结贴。