我试图从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。
我已经尝试过几个小时的研究,但找不到纠正这些行结束的方法。
谢谢
答案 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"
我确定必须有更好的方法来做到这一点,但现在这种方法有效。