1

Powershell (重要な場合は v2) では、区切り文字の可変長文字列を分割できますか? 私の入力ファイルは行で構成されており、各フィールドは 1 つ以上のタブ文字で区切られており、きちんとした列に表示されます。先頭のタブはありません。区切り文字の指定に正規表現が使えると思ったので、試してみました:

get-content $INFILE | foreach-object {
    $LINE = $_.split("`t*");
    $F1 = $LINE[0]
    $F2 = $LINE[1]
    $F3 = $LINE[2]
        . . .
}

各フィールド間にタブが 1 つしかない場合は、必要に応じて機能します。2 つ以上ある場合、それぞれが別個の区切り文字として扱われ、$LINE の一部のメンバーは空のままになります。

4

3 に答える 3

4

代わりに、このオーバーロードを試してください。split メソッドは正規表現パターンを使用せず、char(s) または string(s) のみを使用します。複数の割り当てを使用して、いくつかのコード行を節約することもできます。

$f1,$f2,$f3 = $_.Split("`t",[System.StringSplitOptions]::RemoveEmptyEntries)
于 2013-04-23T12:57:47.917 に答える
2

最初に重複をクリーンアップすれば問題ありません。

$DedupedLine  = $_ -replace '[\t]+',"`t" # Replace multi tabs with a single tab
$LINE  = $DedupedLine.split('`t')
于 2013-04-23T13:04:19.763 に答える
1

.NET メソッドを使用するオプションに加えてstring.Split、PowerShell-splitオペレーター次のような正規表現をサポートしてい`t*ます。

PS> 'comma,separated,,values' -split ',+'
comma
separated
values

各行の最初の 3 つのフィールドにアクセスするには、次を使用できます。

$F1,$F2,$F3,$rest = $_ -split "`t+"
于 2013-04-23T23:13:07.547 に答える