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

index と count を指定する必要はありません。単に使用する

[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 に答える