Использование Powershell для записи двух строк заголовков без удаления существующих данных

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

Я тестировал сценарий powershell для этого, и я могу написать одну строку заголовков, но изо всех сил пытаюсь написать две строки.

Ниже приведен сценарий powershell, который я сейчас пытаюсь создать.

$file = "C:\Users\_svcamerarcgis\Desktop\Test.csv"
$filedata = import-csv $file -Header WorkorderETL 'n ICFAORNonICFA, WONUmber, Origin
$filedata | export-csv $file -NoTypeInformation

Конечный результат, который я ищу, должен быть следующим:

WorkorderETL
ICFAORNonICFA, WONUmber, Origin
xxx,yyy,zzz

person ChisumTrail    schedule 23.01.2020    source источник
comment
зачем вам заголовок в двух разных строках? вы говорите о написании чего-то, что не имеет ничего общего с заголовком? как тема или в своем роде?   -  person Jawad    schedule 24.01.2020
comment
Да, мне нужен WorkorderETL в качестве первой строки в CSV-файле, чтобы система, в которую я загружаю, распознавала, какой инструмент ей нужно использовать. У меня нет контроля над системой, в которую я загружаю файлы. Вторая строка в WorkorderETL будет фактическими заголовками, за которыми следуют данные.   -  person ChisumTrail    schedule 24.01.2020
comment
Я не думаю, что вы сможете импортировать и экспортировать его с помощью дополнительной строки выше. Первая строка считается заголовком, а остальные — данными.   -  person Jawad    schedule 24.01.2020


Ответы (2)


Единственная цель параметра -Header в Import-Csv — предоставить массив имен столбцов, который будет служить именами свойств настраиваемых объектов, в которые анализируются строки CSV. Вы не можете переназначить это для специального форматирования вывода для последующего использования. экспорт.

Вместо этого вы можете использовать следующий подход, вообще обходя необходимость в Import-Csv и Export-Csv (PSv5+):

$file = 'C:\Users\User\OneDrive\Scripts\StackTesting\Test.csv'

# Prepend the 2-line header to the existing file content
# and save it back to the same file
# Adjust the encoding as needed.
@'
WorkorderETL
ICFAORNonICFA,WONUmber,Origin

'@ + (Get-Content -Raw $file) | Set-Content $file -NoNewline -Encoding utf8

Чтобы быть в безопасности, обязательно сначала создайте резервную копию исходного файла. Поскольку файл читается (полностью) и перезаписывается в одном и том же конвейере, существует гипотетическая вероятность потери данных, если обратная запись во входной файл будет прервана.

person mklement0    schedule 24.01.2020

Возможно, вам лучше попытаться обработать это как текстовый файл, учитывая, что вы просто пытаетесь добавить одну строку вверху CSV:

$file = "C:\Users\User\OneDrive\Scripts\StackTesting\Test.csv"
$CSV = "c1r1, c2r1, c3r1 `nc1r2, c2r2, c3r2" 

$filedata = Get-Content $file 

$filedata = "WorkorderETL`n" + $CSV

$filedata | Out-File $file

Это приведет к тому, что файл CSV будет содержать:

WorkorderETL
c1r1, c2r1, c3r1 
c1r2, c2r2, c3r2

Что похоже на то, что вы хотите.

person Owain Esau    schedule 24.01.2020