Итак, я пытаюсь посмотреть имена столбцов в 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, он либо дает мне счетчик длины символа в новой строке для каждого из них, либо какой-то другой тупой материал.
Спасибо
Я не понимаю, что ты хочешь делать. Как должен выглядеть ваш выходной CSV-файл?
Я только что заметил, что вы используете 2 разных имени файла. Вы делаете это с какой-то целью?
@Olaf - Я на самом деле не пытаюсь создать пустой файл csv, но это то, к чему я пришел. Это кажется более разумным, чем пытаться добавить новый столбец на лету. Мне нужно взять соответствующие столбцы, добавить столбец идентификатора и добавить значение и вывести его в новый файл. Если я смогу хотя бы правильно указать имена столбцов, это приблизит меня к моей конечной цели.
@TToni - Итак, в примере данных CSV, который я показал, представьте, что плюс столбец с данными соответствует изменяемой строке. Я не хочу трогать исходный файл. Импортированный файл csv может не иметь соответствующих данных для нового столбца, поэтому я хочу выделить эти строки в другой файл.
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)
.
"$null"
-> ""
Спасибо @TToni, это был тот ответ, который мне нужен
Вам нравится создавать «пустой» файл CSV, содержащий только строку заголовка? Зачем? В Powershell вы обычно просто экспортируете структурированные данные в файл CSV, и Powershell создает для вас необходимые заголовки.