0

我正在编写一个脚本,该脚本从二进制文件中读取,转换为 ASCII,提取/分隔 2 列,并将其输出到 txt。

我查看了这篇文章以实现二进制 > 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)|
4

1 回答 1

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.

于 2013-11-04T15:31:15.953 回答