2016-12-05 2 views
0

私はTCPソケットからいくつかのデータを取得しようとしていて、ファイルに書き出しています。TCPソケットのデータクリーンアップのためのテキスト出力

私はデータをうまく取り出すことができますが、私はそれを "浄化する"必要があります。

私が受け取るデータには、レポートの先頭と各レコードの間のマークを付けるための制御コードがあります。また、CRLFコードの間にNULL文字があるようです。マイデータエディタ(私は値をマスクしてきました)で、次のようになります

#########- #  L#########L ##############L     LLLLLL LLLLLLLL          #,###.## ##/##/## ##/##/##       # 

#########- #  L#########L ##############L     LLLL LL LLLLLLL         ###,###.## ##/##/## ##/##/##     ###### 

#########- #  L#########L ##############L     LLLLLLL           ##,###.## ##/##/## ##/##/##     ###### 

#########- #  L#########L ##############L     LLLLLL LLLLLLLL          #,###.## ##/##/## ##/##/##     ###### 

#########- #  L#########L ##############L     LLL LLLL LLLLLL LLLLL        #,###.## ##/##/## ##/##/##     ###### 

#########- #  L#########L ##############L     LLLLLLL LLLLLLL LLLLLL LLLLL      #,###.## ##/##/## ##/##/##     ###### 

#########- #  L#########L ##############L     LLLLLL LLLLL LLLLLL LLL       #,###.## ##/##/## ##/##/##     ###### 

*#########- #  L#########L ##############L     LLLLLL LLLLL LLLLLL LLL        #,###.## ##/##/## ##/##/##     ###### 

#########- #  L#########L ##############L     LLLLLLLLLLL LLLLLL LLLLL       #,###.## ##/##/## ##/##/##     ###### 

#########- #  L#########L ##############L     LLLLLL LLLLL LLLLLL LLL       #,###.## ##/##/## ##/##/##     ###### 

#########- #  L#########L ##############L     LLLL LLL LLLL           ###.## ##/##/## ##/##/##     ###### 

#########- #  L#########L ##############L     LLLLLLL L LLLLLL LLL        ##,###.## ##/##/## ##/##/##     ###### 

    ######-##  L#########L ##############L     LLLL LLLLLLLL          ##,###.## ##/##/## ##/##/##     ###### 

    ######-##  L#########L ##############L     LLLLL LLLLLLLLLL         ##,###.## ##/##/## ##/##/##     ###### 

    ######-##  L#########L ##############L     LLLL LLL           ##,###.## ##/##/## ##/##/##     ###### 

これは大丈夫だと思う私は(終わり)を取り除くことができない余分な改行があると期待して、そして、行末は、これは私が私がどこに取得しています方法ですHEXエディタ

00 20 00 0D 00 0D 00 0A 00

でこのように見えます。

$new = $outputBuffer.Replace('[^\p{L}\p{Nd}]', '') 

$str = $new.split("`n") 

$myArray = @() 

foreach ($line in $str) { 
    $item = $line.trim([char]0x0003,[char]0x0002,[char]0x0001,[char]0x0000) 

    if ($item -like "Out of*") {break} 

    if ($item -ne "") { 
     $myArray += $item 
     } 
} 

$myArray | Out-File test.aud 

「Out of *」ブレークは、私が気にするデータの終わりを示すため、ループを終了させる場所です。アレイに行を追加するときの「トリム」は、レポートの開始/終了を示す制御コードを処理しますが、NULLは処理しません。

私はこれを数時間試してみましたが、これらの行末を修正する方法を見つけることができません。

はありがとうございました

+0

データがマスクされていないと、これははるかに簡単に答えることができます。もう少し役に立つものを投稿する方法はありますか?理想的には、実行しているコードをテストできるほどのデータが必要です。 –

+0

これは、監査データのチェックであり、したがって機密性が高いことを除いて、私はより良い例を絶対に投稿します。私はそれを解決する方法を見つけました。私も同様に投稿しました。私は良い方法があると確信しています.. – hallert

+0

あなたはそれがうまくいっている –

答えて

0

私がそれを書くこの

を行うことによって、それを固定巻き上げ:

Get-Content dat.tmp | Set-Content $myVar".tmp" 
:行末を固定され、後ろに続いて、それを読んで

$myArray | Out-File dat.tmp 

しかし、それによって各レコード間に余分な行が発生しました(私の行末は真CRLF)ので、私は再び/アウトでの読み取りをしましたが、唯一の有効な行を選択今回私が確信している

Remove-Item dat.tmp 
Remove-Item $myVar".tmp" 

Select-String -Pattern '[^\s]' -Path $myVar".tmp" | ForEach-Object {$_.Line} | Set-Content -Path $myVar".aud" 

は、私は、その後で私の一時ファイルをクリーンアップこれを行うにはより良い方法でなければなりませんが、これは今のところうまくいきます。

関連する問題