如何批量检索文本文件诸多字符串的值?有请高手解答
我有大量如下内容的测试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 , 基础类