Мои заголовки следующие:

Avis,N° Invent.,Cd.Srv.Cl.,Client Name

Я нашел этот код для изменения заголовков

Import-Csv "$treatmentfolder\data.csv" |
    Select-Object @{expression={$_.Avis}; label='avis'} |
    Export-Csv -NoTypeInformation "$treatmentfolder\data2.csv"

Как изменить имена заголовков, в которых используются символы пробела, ., ° и т. Д.?

1
UserToulouse31 9 Май 2018 в 15:22

2 ответа

Лучший ответ

Чтобы выбрать и переименовать конкретное поле, введите в кавычки имя поля, имя которого вы хотите изменить:

... | Select-Object @{n='no_invent';e={$_.'N° Invent.'}}, ... | ...

Чтобы заменить конкретное поле, исключите исходное поле в дополнение к созданию переименованного поля:

... | Select-Object *,@{n='no_invent';e={$_.'N° Invent.'}} -Exclude 'N° Invent.' | ...
3
Ansgar Wiechers 9 Май 2018 в 13:35

Поскольку CSV - это просто текстовый файл, мы можем рассматривать его как замену строки в первой строке файла (элемент массива 0)

В этих параметрах используется простое выражение регулярного выражения для удаления всего, что не является: 0-9 a-z A-Z , или (пробел), поэтому просто измените любые другие символы, которые вы хотите сохранить в регулярном выражении. Это будет работать с любыми именами заголовков.

$content = Get-Content -Path "$treatmentfolder\data.csv"

$content[0] = $content[0] -replace '[^0-9a-zA-Z, ]'

Set-Content "$treatmentfolder\data.csv"

Другой вариант - объединить несколько replace вместе, это позволяет вам добавлять / удалять / изменять заголовки по своему усмотрению. Но в отличие от варианта выше, он жестко привязан к конкретным именам заголовков, поэтому не так просто запускать разные файлы.

$content[0] = $content[0] -replace 'N° Invent.','No_Invent' -replace 'Cd.Srv.Cl.','Cd-Srv-Cl'
3
James C. 9 Май 2018 в 13:59