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

Мне нужно сгенерировать две строки заголовка в существующем файле 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

Ответы [ 2 ]

1 голос
/ 24 января 2020

Единственная цель параметра Import-Csv -Header - предоставить массив имен столбцов , которые будут служить именами свойств пользовательских объектов, в которые анализируются строки 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

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

1 голос
/ 24 января 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

То, что вам нужно.

...