2012-02-21 15 views
5

Görünüşe göre PowerShell-split işleci ve .NET Split() yöntemi tamamen farklı davranır.
.NET, ayırıcı dizelerini karakter dizilerimiş gibi ele alır..NET Dize Bölmesi()

$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 

Çıktı:

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


-split operator: 
Count: 1 
123456789 

bir .NET uygulaması PowerShell gibi aynı tekniği kullanmak ve bir katı birim olarak dize ayırıcı kullandığından emin olmak için herhangi bir yolu var mı? Umarım RegEx olmadan.

Teşekkürler.

DÜZENLEME: string bir etmek döküm olabilir olarak

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

Garip! İyi bir şey Powershell kullanmıyorum; p – leppie

cevap

5

.NET'in String.Split yönteminde iki (grup) aşırı yüklenme var. İlk önce bir karakter dizisi ve ikinci bir dizi dizisi alır. Aslında bir ipi alan bir aşırı yük yok. İlki tarif ettiğiniz gibi davranır, her karakter ayrı ayrı bölünür. İkincisi, istediğin gibi bütün ipler boyunca böler.

Powershell parametrelerini ayrıştırma biçimi nedeniyle, Bölüme geçirilen bir dize bir char dizisi olarak ayrıştırılacak ve ilk aşırı yükleme çağrılacak. Açıkça "46" nın sadece bir dizgi içeren bir dizi olduğunu belirtebilseydiniz, istediğiniz davranışı vermesi gerekir.

9

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

Eğer string.Split(string) aradığınız, bu (string.Split(char[]) aşırı kullanır: Bu Split() kullanılarak, PowerShell'de çalıştı char[], ancak string[]).

string.Split(string[], StringSplitOptions) aşırı yüklenmesini kullanabilmek için, "123456789".Split(new[] { "45" }, StringSplitOptions.None) numaralı şekilde çağırmanız gerekir.

1

Önemli fark, bölünmüş yöntemin yalnızca dizeleri alabilmesi için -split operatörünün bir dize veya regex deseni alabilmesidir. -split operatörünün davranışını düzeltmek için birçok seçeneği vardır. Sen about_split belgede fazla bilgi bulabilirsiniz:

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

0

Kimseye söz görmedim Bir diğer fark dize .split() yöntemi yalnızca yöntemi aradığınız tek dize nesne üzerinde çalışıyor olmasıdır üzerinde.

Powershell -split operatörü argüman olarak bir dizi alır ve dizinin tüm öğelerini bir kerede ayırır.

İlgili konular