我正在编写一个从二进制文件中读取的脚本,转换为ASCII,提取/分隔2列,然后将其输出到txt。
我查看this帖子以实现二进制> ASCII步骤,但是,在我的脚本中实现它的方式,它似乎只在文件的第一行执行上述过程。
如何重新编写此文件以循环遍历文件中的所有行?
我的代码如下。
# run the command script to extract the file
script.cmd
# Read the entire file to an array of bytes.
$bytes = [System.IO.File]::ReadAllBytes("filePath")
# Decode first 'n' number of bytes to a text assuming ASCII encoding.
$text = [System.Text.Encoding]::ASCII.GetString($bytes, 0, 999999)|
# only keep columns 0-22; 148-149; separate with comma delimiter
%{ "$($_[$0..22] -join ''),$($_[147..147] -join '')"} |
# convert the file to .txt
set-content path\file.txt
另外,编写这个部分的更优雅的方法是什么,它只是读取字符串的长度,而不是最多拉入999999字节?
$text = [System.Text.Encoding]::ASCII.GetString($bytes, 0, 999999)|
答案 0 :(得分:1)
您无需指定索引和计数。只需使用
[System.Text.Encoding]::ASCII.GetString($bytes).Split("`r`n",[System.StringSplitOptions]::RemoveEmptyEntries)
或
[System.Text.Encoding]::ASCII.GetString([System.IO.File]::ReadAllBytes("filePath")).Split("`r`n",[System.StringSplitOptions]::RemoveEmptyEntries)
我不确定为什么你只想使用Get-Content
来将其作为字节读取。