2012-02-21 7 views
5

PowerShell -split演算子と.NET Split()メソッドは完全に異なるようです。
.NETは区切り文字列を文字配列として扱います。.NET String Split()

$str = "123456789" 
Write-Host ".NET Split(): " 
$lines = $str.Split("46") 
Write-Host "Count: $($lines.Length)" 
$lines 

$str = "123456789" 
Write-Host "-split operator: " 
$lines = $str -split "46" 
Write-Host "Count: $($lines.Length)" 
$lines 

は出力:

.NET Split(): 
Count: 3 
123 
5 
789 


-split operator: 
Count: 1 
123456789 

.NETアプリケーションは、PowerShellのと同じ技術を使用して行い、1つの固体単位として、文字列の区切りを使用する方法はありますか?うまくいけば、RegExなし。

ありがとうございました。

EDIT:stringはにキャストすることができよう

Write-Host "Divided by 46:" 
"123456789".Split([string[]] "46", [StringSplitOptions]::None) 

Write-Host "`n`nDivided by 45:" 
"123456789".Split([string[]] "45", [StringSplitOptions]::None) 


Divided by 46: 
123456789 


Divided by 45: 
123 
6789 
+0

奇妙な!私がPowershellを使わないのは良いことです; p – leppie

答えて

5

.NETのString.Splitメソッドには、2つの(グループの)オーバーロードがあります。最初の文字配列は文字配列を受け取り、2番目の文字配列は文字列配列を受け取ります。実際には、文字列を受け取るオーバーロードはありません。最初のキャラクターはあなたが描くように振る舞い、各キャラクターは個別に分割されます。 2番目の文字列は、文字列全体に沿って分割します。

Powershellがパラメータを解析するため、Splitに渡される文字列はchar配列として解析され、最初のオーバーロードが呼び出されます。 "46"がただ一つの文字列を含む配列であることを明示的に指定できれば、それはあなたに必要な振る舞いを与えるはずです。

9

http://msdn.microsoft.com/en-us/library/system.string.split.aspx

あなたがstring.Split(string)を呼んでいる、それは(string.Split(char[])オーバーロードを使用しています。これは、スプリット()を使用して、PowerShellで働いていた char[]であるが、string[]ではない)。

string.Split(string[], StringSplitOptions)オーバーロードを使用するには、"123456789".Split(new[] { "45" }, StringSplitOptions.None)の方法で呼び出す必要があります。

1

主な違いは、-split演算子は文字列または正規表現パターンをとることができますが、Splitメソッドは文字列しか取り込めないことです。 -split演算子には、その振る舞いを微調整するための多くのオプションがあります。あなたはabout_split文書でより多くの情報を見つけることができます:私は誰にも言及して見ませんでした

http://technet.microsoft.com/en-us/library/dd347708.aspx

0

もう一つの違いは、文字列.split()メソッドは、唯一のあなたがメソッドを呼び出している単一の文字列オブジェクト上で動作することですに。

Powershell -split演算子は、配列の引数として配列をとり、配列のすべての要素を一度に分割します。