现在想要做的是打开一个文本文件,此文本文件有若干行(大于两千),想逐行读取此文本文件,找到待处理的公式并将公式显示出来。(只显示到一次项,即Energy(keV) =    10.200 +     0.457*ch即可)现在运行的时候不报错,但是在打开要处理的文件以后VB窗口就没有任何反应了,想请教一下这段代码有什么问题?是不是进入什么死循环了?
在程序行中的一些代码是我从他人的程序中拷贝过来的,我已经用红色标注,但是我不太明白他们的意思,想请各位能否顺便给我解释一下,最好能在后面给出注释,看看能否适合在这里使用?非常感谢!!
待处理的公式:   
(此公式前有四位字符为空格)Energy(keV) =    10.200 +     0.457*ch +  0.00E+000*ch^2 +  0.00E+000*ch^3
000*ch^2的意思是0乘以ch的二次方
代码:Private Sub Command1_Click()
MsgBox "是否继续?", vbYesNo
Dim filename1 As String
CommonDialog1.ShowOpen
filename1 = CommonDialog1.FileName
If filename1 = "" Then
MsgBox "请选择文件!"
Exit Sub
End If
Dim gongshi As String 
Dim fs As New FileSystemObject
Dim ts As TextStream
Set ts = fs.OpenTextFile(filename1)
Dim ss(3000) As String
Dim tt() As String
Dim rr() As String
Dim i, j As Integer
i = 0
j = 0
While Not ts.AtEndOfLine
     ss(i) = ts.ReadLine
     i = i + 1
Wend
While j < UBound(ss)
If Left(Trim(ss(i)), 6) = "energy" Then
     gongshi = Mid(ss(i), 1, 36)
     End If
     Wend
End Sub

解决方案 »

  1.   

    就打开文件查找,用得着这么麻烦吗?不用FSO:
    Option ExplicitPrivate Sub Command1_Click()
        Dim Fnum As Long, Fbyte() As Byte, arr() As String, GongShi As String, i As Long
        ' 设置“CancelError”为 True
        CommonDialog1.CancelError = True
        On Error GoTo ErrHandler
        ' 设置标志
        CommonDialog1.Flags = cdlOFNHideReadOnly
        ' 设置过滤器
        CommonDialog1.Filter = "All Files (*.*)|*.*|Text Files" & "(*.txt)|*.txt"
        ' 指定缺省的过滤器
        CommonDialog1.FilterIndex = 2
        ' 显示“打开”对话框
        CommonDialog1.ShowOpen
        ' 显示选定文件的名字
        Fnum = FreeFile
        Open CommonDialog1.FileName For Binary As #Fnum
        ReDim Fbyte(0 To LOF(Fnum) - 1)
        Get #Fnum, , Fbyte
        Close #Fnum
        arr = Split(StrConv(Fbyte, vbUnicode), vbCrLf)
        For i = 0 To UBound(arr)
            If InStr(1, LCase(arr(i)), "energy") > 0 Then
               GongShi = arr(i): Exit For
            End If
        Next
        GongShi = Mid(GongShi, 1, 36)
        Debug.Print GongShi '最后的公式
        Exit Sub
    ErrHandler:
        ' 用户按了“取消”按钮
        Exit Sub
    End Sub