用于文本输出的TCP套接字数据清理

时间:2016-12-05 17:54:52

标签: powershell

我试图从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> 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

&#34; Out of *&#34; break是我终止循环的地方,因为它表示我关心的数据的结尾。 &#34;修剪&#34;将数据行添加到数组时,需要处理标记报告开头/结尾的控制代码,而不是NULL。

我已经尝试过几个小时的研究,但找不到纠正这些行结束的方法。

谢谢

1 个答案:

答案 0 :(得分:0)

我通过这样做来解决这个问题

写出:

$myArray | Out-File dat.tmp

然后读回来,修正了行尾:

Get-Content dat.tmp | Set-Content $myVar".tmp"

但是这导致每条记录之间有一条额外的线(尽管我的行结尾现在是真正的CRLF),所以我再次进行了读入/读出,但这次只选择有效行:

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

然后我用:

清理了我的临时文件
Remove-Item dat.tmp
Remove-Item $myVar".tmp"

我确定必须有更好的方法来做到这一点,但现在这种方法有效。