2013-04-10 9 views
5

Bu soru sorulmuştur, ancak ben powershell bir çözüm çalışıyorum ama istenen sonuçları alamıyorum.Çift tırnak içinde virgül virgülle çift tırnak nasıl bölünür

$line = '1,2,"N",09/04/13,"P09042013ZSD(1,0)","ZSD"' 
[string[]] $splitColumns = $line.Split('(,)(?=(?:[^"]|"[^"]*")*$)', [StringSplitOptions]'RemoveEmptyEntries') 

ben döngü bölünmüş değerlerine gerçi

1 
2 
"N" 
09/04/13 
"P09042013ZSD(1,0)" 
"ZSD" 

bekliyorum Ama set ExplicitCapture ile http://regexhero.net/tester/ (Böl) kullanarak regex test ettik ve onu döndürür

1 
2 
N 
09/04/13 
P09042013ZSD 
1 
0 
ZSD 

alıyorum istenen sonuçlar.

Çalışma çözüm

$RegexOptions = [System.Text.RegularExpressions.RegexOptions] 
$csvSplit = '(,)(?=(?:[^"]|"[^"]*")*$)' 

$splitColumns = [regex]::Split("StringHere", $csvSplit, $RegexOptions::ExplicitCapture) 
+0

yapabilirsiniz basitçe Kullanım Hemen Implode: Böyle yapabilirsin .net

$line -split ',(?=(?:[^"]|"[^"]*")*$)' 

powershell -split kullanma bölme metin

için regex kabul & bunun için ... –

+0

Sanırım bunlar bir csv dosyasındaki hücreler mi? Kaynak dosyasındaki ayırıcı için '' 'gibi kullanılmayan bir karaktere sahip olmayı tercih ederim. – Simon

+0

Kaynak dosyaya dokunamıyor. – David

cevap

5

[string].split() yöntem split üzerine regex ama sadece [char[]] veya [string[]] kabul etmez.

Böyle deneyebilirsiniz:

[regex]::Split($line , ',(?=(?:[^"]|"[^"]*")*$)') 
+0

Ben de -split denedim. Ekstra satırlar olarak, yani 1, 2 3 öğeyi ekledi. Bunları kaldırmak için zaten var, StringSplitOptions] 'RemoveEmptyEntries' nasıl çalıştı? – David

+0

@DavidLiddle Kodumu denediniz mi? Yakalamayı kaldırdım ',' –

+0

[regex] :: Split ve RegexOptions.ExplicitCapture ile çalıştım. – David