2つの部分に分割する文字列があります。最初の部分はコンマの前(,
)で、2番目の部分はすべてコンマの後の部分(コンマを含む)です。
変数$Header
のコンマの前の最初のピースを取得できましたが、1つの大きな文字列の最初のcomma
の後のピースを取得する方法がわからないため、
$Content = "Text 1,Text 2,Text 3,Text 4,"
テキスト5、テキスト6などのように、ここに表示されるテキストがさらにある場合があります。
$String = "Header text,Text 1,Text 2,Text 3,Text 4,"
$Header = $String.Split(',')[0] //<-- $Header = "Header text"
PowerShellの-split
演算子は、返される部分文字列の最大数、つまり返される部分文字列の数の指定をサポートしています。分割するパターンの後に、戻したい文字列の数を指定します。
$header,$columns = "Header text,Text 1,Text 2,Text 3,Text 4," -split ',',2
次のようなものを試してください:
$Content=$String.Split([string[]]"$Header,", [StringSplitOptions]"None")[1]
文字列に従って分割するとき、関数split
の異なるシグネチャを使用しています。
基本的な使用に必要な引数は1つだけで、区切り文字が必要です(詳細については here などを参照してください)。ただし、文字列を使用するための署名は次のとおりです。
System.String[] Split(String[] separator, StringSplitOptions options)
これが、文字列を文字列の配列としてキャストする必要がある理由です。この場合はNone
オプションを使用しますが、split
のドキュメントで他のオプションを利用できます。
最後に、$Heasder,
の値は$String
の先頭にあるため、結果の配列の2番目のメンバーをキャッチする必要があります。
アーロンの方法は最高ですが、私は私の解決策を提案します
$array="Header text,Text 1,Text 2,Text 3,Text 4," -split ','
$array[0],($array[1..($array.Length -1)] -join ",")
この代替ソリューションでは、単一の割り当てで配列を複数の変数に分散するPowerShellの機能を利用しています。ただし、-split
演算子はカンマごとに分割され、PowerShellの組み込みの配列から文字列への変換により、要素が連結されます。したがって、String.Split
ほど効率的ではありませんが、あなたの例では無視できます。
$OFS = ','
$Content = 'Header text,Text 1,Text 2,Text 3,Text 4,'
[String]$Header,[String]$Rest = $Content -split $OFS
$OFS = ' '
Write-Host "Header = $Header"
Write-Host "Rest = $Rest"
最後に、$OFS
は、配列要素を単一の文字列に戻すときに使用する文字を決定するPowerShellの特別な変数です。デフォルトでは、スペースです。しかし、それは何にでも変更できます。