2014-09-24 2 views
0

Итак, я рассматриваю разбивку CSV с использованием Powershell. CSV изменен | который не является проблемой, и я хочу разбить его на несколько меньших csvs, сохранив оригинал. Разрывы будут возникать в зависимости от значения в одном столбце, содержащем один из списка значений.
То, что я сделал до сих пор является для импорта CSV (с разделителями по |), а затемРазбивка CSV-файлов

foreach($line in $csv) { 
if($columnValue -like $target1) { 
export-csv filename1.csv -Delimiter `| $line -append)} 
elseif($columnValue -like $target2) { 
export-csv filename2.csv -Delimiter `| $line -append)} 

т.д.

Однако я не думаю, что это правильно экспортировать, и я не хочу, чтобы быть кавычками (и да, я знаю, что это стандарт, но я не хочу их). Также я хочу, чтобы заголовок из исходного csv был применен к дочернему csvs и его не применяли.

жаль, если Theres лучший способ форматирования кода еще нового здесь

ответ

0

Вот где я предлагаю удивительность коммутатора командлета. Он сравнивает что-либо с несколькими потенциальными совпадениями и выполняет соответствующие соответствия.

Switch($csv){ 
    {$_.column -match $target1} {$_ | Export-CSV filename1.csv -append -delimiter '|'} 
    {$_.column -match $target2} {$_ | Export-CSV filename2.csv -append -delimiter '|'} 
    {$_.column -match $target3} {$_ | Export-CSV filename3.csv -append -delimiter '|'} 
} 
+0

Спасибо! Будучи новичком в PowerShell, я не знал, что на Java есть переключатель. Есть ли эффективный способ избавиться от котировок вокруг каждого поля? –

+0

Не очень хорошо. Если вы сделаете это, вам будет намного сложнее. Вам нужно либо загрузить файл в конце, либо заменить '', '' на ',' или использовать convertto-csv, pipe to out-string (я думаю, мог бы пропустить этот бит), заменить то же самое на цикл ForEach, затем канал в Out-File -append. – TheMadTechnician

0
$data = import-csv $csvfile 
$data | ?{$_.val -eq $criteria1} | export-csv -path "File1.csv" 
$data | ?{$_.val -eq $criteria2} | export-csv -path "File2.csv" 
Смежные вопросы