To pytanie zostało zadane wcześniej, ale próbowałem pracować z rozwiązaniem powershell, ale nie otrzymuję pożądanych rezultatów.Jak podzielić ciąg przez przecinek ignorując przecinek w podwójnych cudzysłowach
$line = '1,2,"N",09/04/13,"P09042013ZSD(1,0)","ZSD"'
[string[]] $splitColumns = $line.Split('(,)(?=(?:[^"]|"[^"]*")*$)', [StringSplitOptions]'RemoveEmptyEntries')
Kiedy pętla chociaż wartości dzielonych Oczekuję
1
2
"N"
09/04/13
"P09042013ZSD(1,0)"
"ZSD"
Ale otrzymuję
1
2
N
09/04/13
P09042013ZSD
1
0
ZSD
Ja testowałem regex przy użyciu http://regexhero.net/tester/ (Split) z ExplicitCapture ustawiony i zwraca pożądane wyniki.
Roztwór roboczy
$RegexOptions = [System.Text.RegularExpressions.RegexOptions]
$csvSplit = '(,)(?=(?:[^"]|"[^"]*")*$)'
$splitColumns = [regex]::Split("StringHere", $csvSplit, $RegexOptions::ExplicitCapture)
Można po prostu użyć Wystarczy implozji & expload dla tego ... –
Chyba są to komórki z pliku CSV? Wolałbym mieć nieużywany znak, taki jak ';' dla separatora w pliku źródłowym. – Simon
Nie można dotknąć pliku źródłowego. – David