0

こんにちは私はターゲット「値」で始まる文字列を抽出しようとしています。その後、その間のすべての情報を抽出し、同じタゲット「値」が表示されると抽出を停止します。txtファイルを扱っています。

元:

80 E4 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 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 80 E6 0C 00 2A 08 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

これは他の例ではうまく機能していたので、私は何か間違ったことをしていますか?

ありがとう!

4

1 に答える 1

0

あなたが持っているものは、いくつかの入力で「ファイルの終わりから落ちる」でしょう。以下の「until」句に追加されたテストはそれを修正します。

これは、入力の出力と一致します。完全なケースでケースがどのように処理されるかについて、いくつかの仮定を立てる必要がありました。

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
于 2012-07-23T14:38:22.333 に答える