2012-07-20 43 views
0

你好我想提取與目標「值」開頭的字符串,然後將提取的所有信息在兩者之間,那麼當它看到是的相同的taget「價值」它將停止提取。我正在處理一個txt文件。嘗試匹配一行的開頭的字符串,然後解壓到相同的字符串呈現

例:

80 E4 AD 00 80 09 4F 07 A0 00 00 01 51 53 7F 00 A4 04 00 00 80 E6 02 00 22 09 A0 00 00 00 18 20 41 43 54 00 14 15 C6 80 E8 00 00 C0 E2 1B 4F 0F A0 00 00 00 18 10 01 08 01 00 00 80 E8 00 01 C0 A0 00 00 00 18 20 01 04 05 00 02 08 A0 00 00 80 E8 00 02 C0 FF 00 01 00 00 00 07 0A C7 06 00 F3 80 77 01 80 E6 0C 00 4E 09 A0 00 00 00 18 20 41 43 54 0A A0 00 00 00 18 20 80 E8 02 00 21 08 A0 00 00 00 18 10 01 07 00 14 4F 23 7E 73 A9 80 E6 0C 00 08 2A A0 00 00 00 18 10 01 07 09 A0 00 00 00 18 10 80 C0 00 00 01 00 00 A4 04 00 0F A0 00 00 00 18 10 01 08 01 00 00 00 BA FE 02

所以我想從那裏開始的 「80 E6」 中提取,然後提取所有直到它再次顯示「80 E6」的標籤。

所以輸出將是:

80 E6 02 00 22 09 A0 00 00 00 18 20 41 43 54 00 14 AD 15 C6 80 E8 00 00 C0 E2 1B 4F 0F A0 00 00 00 18 10 01 08 01 00 00 80 E8 00 01 C0 A0 00 00 00 18 20 01 04 05 00 02 08 A0 00 00 80 E8 00 02 C0 FF 00 01 00 00 00 07 0A C7 06 00 F3 80 77 01 80 E6 0C 00 4E 09 A0 00 00 00 18 20 41 43 54 0A A0 00 00 00 18 20 80 E8 02 00 21 08 A0 00 00 00 18 10 01 07 00 14 4F 7E 23 A9 73

到目前爲止,這作爲我的腳本:

Function Extractor(){ 

$firstTag = '^80 E6.*$' 
$secondTag = '^80 E6.*$' 

$t= foreach ($line in (Get-Content C:\Users\user\Desktop\dummy.txt)) { 

$x 
    if ($line -match $firstTag) { 

     do {    

      $foreach.current 


      $foreach.MoveNext() > $null 

     } 

     until ($foreach.current -match $secondTag)   

     $foreach.current 

#  continue 

     Write-Verbose "Next match" 

    } 
} 
$t > C:\Users\nicalder\Desktop\Project1\MasterCard_Trace\modMasterCardTraceExtracted2lined.txt 

} 
Extractor 

難道我做錯了什麼,因爲這是爲我工作在其他情況下,偉大的..

謝謝!

+0

我只是想通了。但是我的聲望點還不到10點,所以我不能發佈長期的解決方案。 – 2012-07-20 15:17:18

回答

0

你有什麼會「脫落文件的結尾」一些輸入。測試添加到下面的「直到」條款修復了這個問題。

這是你的輸入輸出相匹配。我必須對整個案件如何處理案件作出一些假設。

Function Extractor{ 

    $firstTag = '^80 E6.*$' 

    $secondTag = '^80 E6.*$' 



    $t= foreach ($line in (Get-Content C:\temp\input3.txt)) { 

     if ($line -match $firstTag) { 

      $firstMatch = $line 

      $foreach.MoveNext() > $null 

      $lineCounter = 2 

      do {    

       if ($lineCounter -gt 2) { 

        if ($linecounter -eq 3) { 

         $firstMatch 

         $secondMatch 

        } 

        $foreach.current 

       } 

       $secondMatch = $foreach.current # only used for the second line,  otherwise its is thrown away 

       $foreach.MoveNext() > $null 

       $lineCounter++ 

      } 

      until (($foreach.current -match $secondTag) -or ($foreach.current -eq $null)) 

#    $foreach.current 

    #  continue 

     } 

    } 

    $t | Out-file "C:\temp\output3.txt" 

} 

Extractor 
相關問題