介绍解析循环/重构丑陋的代码

时间:2013-11-04 14:56:50

标签: parsing powershell automation

我正在编写一个从二进制文件中读取的脚本,转换为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)|

1 个答案:

答案 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来将其作为字节读取。