Powershell ExportCSV экспортирует пустой файл, когда импортируемый файл поступает из Import-csv - PullRequest
0 голосов
/ 17 января 2020

У меня есть файл CSV, в котором мне нужно изменить разделитель с запятой на точку с запятой. Я исправил эту проблему с помощью следующей команды

(Import-CSV $File) | Export-Csv $File -delimiter ';' -notypeinformation

Но когда импортированный CSV-файл содержит только одну строку, которая, как я полагаю, обрабатывается как заголовки. Он удаляет эту строку в выходном файле и становится пустым файлом. Однако, когда у меня есть более одной строки, и CSV содержит заголовок и некоторые данные, экспортированный файл выполняется правильно с заголовками и данными.

Код, который я использовал для установки файла заголовка в начале мой скрипт

#set csv headers
Set-Content -Path "$FolderNameCiTypeDelta" -Value "name,type,location,size"

Я пытался добавить код

  (Import-CSV $File -Header "name,type,location,size") | Export-Csv $File -delimiter ';' -notypeinformation 

Но это сделало просто дополнительную строку с указанными мной заголовками.

[EDIT]

2 файла csv, которые я тестирую, содержат следующие строки

Файл, который становится пустым с помощью команды import -> export, содержит

name,type,location,size

Файл, который выполняет что мне нужно с командой import -> export содержит

name,type,location,size
test,extra,line

1 Ответ

0 голосов
/ 17 января 2020

Вы можете сделать следующее:

$file = 't.txt'
$contents = Get-Content $file -totalcount 2
if ($contents.Count -gt 1) {
    (Import-Csv $file) | Export-Csv $file -Delimiter ';' -NoType
}
if ($contents.Count -eq 1) {
    $contents -replace ',',';' | Set-Content $file
}

Идея состоит в том, чтобы прочитать две строки вашего файла. Если он содержит только одну строку, он будет использовать -replace для исправления разделителей. Если в нем более двух строк, он будет использовать команды *-Csv.

Раздел -replace работает только в том случае, если в значениях полей нет запятых. Если у вас есть запятые в ваших полях, то у вас должны быть текстовые квалификаторы (скорее всего, двойные кавычки) вокруг ваших полей. В этом случае вы можете просто использовать -replace '","','";"'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...