Powershell - Запрос имен столбцов CSV и запись их в новый CSV - PullRequest
0 голосов
/ 01 мая 2018

Итак, я пытаюсь просмотреть имена столбцов в CSV, записать их в массив и затем выплюнуть данные обратно в новый CSV с присоединенным новым столбцом. Мне все равно, как выглядит текущая таблица данных, если я могу добавить столбец в заголовки. Это кажется довольно простой вещью, которую я могу сделать, но я не могу найти ситуации, когда кто-то делал это. Например:

"Name","Location","Phone"
"John Smith","Toronto","555.555.5555"
"Jane Doe","Dallas","555.555.5554"

Я просто хочу сохранить имена столбцов «Имя», «Местоположение» и «Телефон» и поместить их в другой CSV с одним дополнительным столбцом. Подвох в том, что на самом деле столбцов больше, и они не всегда одинаковы, поэтому сценарий должен быть независим от имен столбцов. Я должен быть в состоянии передать его любому CSV с любым количеством столбцов с разными именами и иметь возможность получить выходной файл только с именами столбцов. Я пробовал по крайней мере дюжину различных способов сделать это и продолжал сталкиваться с различными проблемами.

Пример:

$validatedfilepath = "validfile.csv"
$csvData = New-Object PSObject
$csvData = Import-CSV "file.csv" | Add-Member @{ID="$null"} -PassThru
$csvdata = $csvdata | get-member -Name * -MemberType NoteProperty
$csvData = @($csvData.Name)
$csvData

Это покажет мне точный список имен столбцов, которые я хочу в моем новом валидном файле, но я не знаю, как экспортировать его в CSV в качестве имен столбцов. Каждый раз, когда я пытался выполнить export-csv, он либо подсчитывал длину символа в новой строке для каждого, либо для какого-то другого тупого материала.

Спасибо

1 Ответ

0 голосов
/ 01 мая 2018

Export-CSV читает имена столбцов из элементов входного объекта. Итак, вы уже на правильном пути, вам просто нужно немного упростить, например:

$csvData = Import-CSV "file.csv" | Add-Member @{ID="$null"} -PassThru
# You can now modify/enrich/filter the data somehow, for example like $csvdata[0].ID = 56387, then just export it:
$csvData | Export-CSV -NoTypeInformation -Path "newfile.csv"

Ошибка, которую вы сделали, перезаписывает импортированные данные в $csvdata с результатом Get-Member. И затем вы перезаписываете его снова с выражением @($csvData.Name).

...