当前位置:编程学习 > VB >>

如何批量检索文本文件诸多字符串的值?有请高手解答

我有大量如下内容的测试log文件(.bat),可能几千到几万个,现在我想读取其中的字段值,以便存到数据库中去,想要读取的字符值我都用红色字体标记出来了,有请各位高手晒晒自己的思路,帮小弟一个大忙,只给我指点指点思路我该怎么检索其中的字段值,诚谢!!!
SERIAL_NUMBER=944452AD0FC3
MAC_ADDRESS=944452AD0FC3
MODEL=WN7522D-LF-AK
Start: 2010/8/23  20:19:20

1. IQ_VERIFY_RX_PER 2412  HT20_MCS7
------------------------------------------------------
   PER      0.900 % (10.0 ~ 0.0)          

2. IQ_VERIFY_RX_PER 2472  HT20_MCS7
------------------------------------------------------
   PER      0.000 % (10.0 ~ 0.0)          

3. IQ_VERIFY_RX_PER 2442  HT40_MCS7
------------------------------------------------------
   PER      0.000 % (10.0 ~ 0.0)          

4. IQ_VERIFY_RX_PER 2442  11M
------------------------------------------------------
   PER      0.200 % (8.0 ~ 0.0)           

5. IQ_CAL_TX_OUTPUT 
------------------------------------------------------
   Tx Ch 3  18.047 dBm (18.5 ~ 17.5)      
   Tx Ch 7  17.699 dBm (18.5 ~ 17.5)      
   Tx Ch 11 17.809 dBm (18.5 ~ 17.5)      
   Tx Ch 3  17.734 dBm (18.5 ~ 17.5)      
   Tx Ch 7  17.705 dBm (18.5 ~ 17.5)      
   Tx Ch 11 17.574 dBm (18.5 ~ 17.5)      
   Tx Ch 3  12.136 dBm (13.0 ~ 12.0)      
   Tx Ch 7  12.266 dBm (13.0 ~ 12.0)      
   Tx Ch 11 12.119 dBm (13.0 ~ 12.0)      
   Tx Ch 3  12.212 dBm (13.0 ~ 12.0)      
   Tx Ch 7  12.077 dBm (13.0 ~ 12.0)      
   Tx Ch 11 12.407 dBm (13.0 ~ 12.0)      

6. IQ_VERIFY_TX 2422  HT40_MCS7 ANT_A
------------------------------------------------------
   Freq Err -2.014 ppm (25.0 ~ -25.0)     
   EVM      -34.469 dB (-28.0 ~ -100.0)   
   Power    12.515 dBm (14.0 ~ 11.5)      
   Spec Mask 0.000 % (2.0 ~ 0.0)          
   Gain     0x21

7. IQ_VERIFY_TX 2462  HT40_MCS7 ANT_A
------------------------------------------------------
   Freq Err -1.983 ppm (25.0 ~ -25.0)     
   EVM      -33.662 dB (-28.0 ~ -100.0)   
   Power    12.498 dBm (14.0 ~ 11.5)      
   Spec Mask 0.000 % (2.0 ~ 0.0)          
   Gain     0x1F

8. IQ_VERIFY_TX 2442  54M ANT_A
------------------------------------------------------
   Freq Err -2.076 ppm (25.0 ~ -25.0)     
   EVM      -29.427 dB (-25.0 ~ -100.0)   
   Power    14.298 dBm (15.0 ~ 12.5)      
   LO Leakage -3.454 dB (2.0 ~ -999.0)    
   Spec Mask 0.000 % (2.0 ~ 0.0)          
   Gain     0x23

9. IQ_VERIFY_TX 2442  11M ANT_A
------------------------------------------------------
   Freq Err -2.088 ppm (25.0 ~ -25.0)     
   EVM      -24.454 dB (-10.0 ~ -100.0)   
   Power    17.420 dBm (19.5 ~ 16.5)      
   Spec Mask 0.000 % (2.0 ~ 0.0)          
   Gain     0x20

10. IQ_VERIFY_TX 2422  HT40_MCS7 ANT_B
------------------------------------------------------
   Freq Err -2.076 ppm (25.0 ~ -25.0)     
   EVM      -34.226 dB (-28.0 ~ -100.0)   
   Power    12.574 dBm (14.0 ~ 11.5)      
   Spec Mask 0.000 % (2.0 ~ 0.0)          
   Gain     0x27

11. IQ_VERIFY_TX 2462  HT40_MCS7 ANT_B
------------------------------------------------------
   Freq Err -2.033 ppm (25.0 ~ -25.0)     
   EVM      -33.736 dB (-28.0 ~ -100.0)   
   Power    12.774 dBm (14.0 ~ 11.5)      
   Spec Mask 0.000 % (2.0 ~ 0.0)          
   Gain     0x27

12. IQ_VERIFY_TX 2442  54M ANT_B
------------------------------------------------------
   Freq Err -2.117 ppm (25.0 ~ -25.0)     
   EVM      -36.443 dB (-25.0 ~ -100.0)   
   Power    13.993 dBm (15.0 ~ 12.5)      
   LO Leakage -18.405 dB (2.0 ~ -999.0)   
   Spec Mask 0.000 % (2.0 ~ 0.0)          
   Gain     0x29

13. IQ_VERIFY_TX 2442  11M ANT_B
------------------------------------------------------
   Freq Err -2.142 ppm (25.0 ~ -25.0)     
   EVM      -26.660 dB (-10.0 ~ -100.0)   
   Power    17.295 dBm (19.5 ~ 16.5)      
   Spec Mask 0.000 % (2.0 ~ 0.0)          
   Gain     0x1A

                *****************
                **** P A S S ****
                *****************


End: 2010/8/23  20:20:29


--------------------编程问答-------------------- 帖子发出来格式有点变了,主要是红色字体前边的可以认为是变量名,后边可以认为是单位,红色字体和两边都有四五个空格间隔 --------------------编程问答-------------------- 貌似你的红色标的不好,有的没有标上吧?

--------------------编程问答--------------------

'解释一下对一个文件的处理过程:

Do Until EOF(1)

'1 逐行读入文本。
Line Input #1, strLine

'2 对一行字符串实行替换,将连续的多个空格换成单一空格。
Do While InStr(strLine, Space(2))
strLine = Replace(strLine, Space(2), Space(1))
Loop

'3 分割字符串
strItem = Split(strLine, Space(1))

'4 检索关键字
Select Case strItem(0)
    Case "PER"
        lstPer.AddItem strItem(1)  '假定将数据暂存到 ListBox
    Case "Freq"
        lstFreqErr.AddItem strItem(2)
    Case "EVM"
        lstEVM.AddItem strItem(1)  '假定将数据暂存到 ListBox
    Case "Power"
        lstPower.AddItem strItem(1)
End Select

Loop --------------------编程问答--------------------

Option Explicit

Private Sub Form_Load()
    Dim s()    As String
    Dim Result As String
    Dim i      As Long
    Const Patrn = "(PER\x20[0-9.]*?\x20%|Freq\x20Err\x20[0-9-.]*?\x20ppm|EVM\x20[0-9.-]*?\x20dB|Power\x20[0-9.-]*?\x20dBm|\*{4,4}[a-zA-Z\x20]{1,}\*{4,4})"
    Result = ""

    If RegExpTest(Patrn, txtA.Text, s) Then

        'txtA为你的文本
        For i = LBound(s) To UBound(s)
            Result = Result & s(i) & vbCrLf
        Next

        MsgBox Result '显示结果
    Else
        MsgBox "找不到文本"
    End If

End Sub

Private Function RegExpTest(Patrn As String, _
                            strng As String, _
                            Result() As String) As Boolean
    Dim Re    As Object
    Dim Rec   As Object
    Dim nLoop As Long
    Set Re = CreateObject("VBScript.RegExp")
    Re.Global = True
    Re.Pattern = Patrn
    Set Rec = Re.Execute(strng)
    RegExpTest = Rec.Count > 0

    If RegExpTest Then
        ReDim Result(Rec.Count - 1) As String

        For nLoop = 0 To Rec.Count - 1
            Result(nLoop) = Rec(nLoop).Value
        Next

    End If

    Set Rec = Nothing
    Set Re = Nothing

End Function

--------------------编程问答-------------------- 这里我忘记给大家指明一下了,其实在上面文本的每条长横线上面为测试的名称,比如有
1. IQ_VERIFY_RX_PER 2412 HT20_MCS7
2. IQ_VERIFY_RX_PER 2472 HT20_MCS7
标号1234测试的都是接收信号即“RX”但是channal不一样,一个是2412,一个是2472,就是无线网卡不同的通道所接收信号的能力,标号1234测的大概一样
6. IQ_VERIFY_TX 2422 HT40_MCS7 ANT_A
7. IQ_VERIFY_TX 2462 HT40_MCS7 ANT_A
8. IQ_VERIFY_TX 2442 54M ANT_A
9. IQ_VERIFY_TX 2442 11M ANT_A
10. IQ_VERIFY_TX 2422 HT40_MCS7 ANT_B
这里主要测试的发送信号,transmit即"TX"标号6和7不同的是channal不一样,标号8和9的频率带宽不一样,一个是54M,一个是11M,标号6和10的天线不一样,一个是ANT_A,一个是ANT_B,因为有的网卡是一根天线即单发单收的方式发送信号,有的是两根天线多发多收的方式发送接收信号
现在我发帖子的主要目的是每一部分单独的读取然后每一部分所要取的变量名也不同,请问大家如何操作,另外我想问一下读取文件能不能读取特定行的内容比如第5行到第10行的内容:能不能
open "路径" for input[(from 5 to 10)] as #1    呵呵,中括号是我随便加的,但我想以这样的方式读取,能不能有方法实现?
--------------------编程问答-------------------- 遍历文件,遍历文件的每一行内容,提取关键信息,找出关键数据
再用ADO连接到数据库写数据即可
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,