Скрипт Powershell для добавления новой строки с 4 элементами в существующий файл CSV - PullRequest
0 голосов
/ 04 марта 2020

Прости мою попытку новичка. Любая помощь будет принята с благодарностью! Вот макет:

Заголовки столбцов CSV:

VENDOR, # СТРАНИЦЫ, ОТПРАВЛЯЮЩИЙ, ПОЛУЧАТЕЛЬ

DocIn c, 25, Джон, Мэри

Я хотел бы добавить новую строку под этим с:

AcmeIn c, 30, Билл, Пол

Я использую этот скрипт (подставляя фактические данные в param для тестирования):

param($Vendor)

param($Pages)

param($Sender)

param($Recipient)

$newRow = $Vendor, $Pages, $Sender, $Recipient

$newRow | Export-Csv -Append -path C:\Files\CSVFILE.CSV

Заранее спасибо!

1 Ответ

1 голос
/ 04 марта 2020

и добро пожаловать в StackOverflow! Вы сделали хорошую попытку и допустили несколько мелких ошибок, поэтому давайте пройдемся по этому очень быстро. Начнем с блока Param(). Это должен быть массив параметров, а не несколько вызовов Param(). Так должно выглядеть так:

param(
    $Vendor,
    $Pages,
    $Sender,
    $Recipient
)

Это достаточно просто, двигаясь дальше. Командлет Export-Csv ожидает получить объект со свойствами для экспорта, а не массив строк. Таким образом, мы можем сделать это одним из двух способов. Мы можем либо просто манипулировать строкой и выводить строку, либо мы можем создать объект и экспортировать его в csv. Мы будем go с последним, так как это то, что вы пытались, я думаю.

Сначала мы создаем объект:

$newRow = [PSCustomObject]@{
    'Vendor'=$Vendor
    '#Pages'=$Pages
    'Sender'=$Sender
    'Recipient'=$Recipient
}

Теперь, когда у нас есть объект, мы можем просто передайте это Export-Csv именно так, как вы делали это раньше. Таким образом, законченный код выглядит так:

param(
    $Vendor,
    $Pages,
    $Sender,
    $Recipient
)

$newRow = [PSCustomObject]@{
    'Vendor'=$Vendor
    '#Pages'=$Pages
    'Sender'=$Sender
    'Recipient'=$Recipient
}

$newRow | Export-Csv -Append -path C:\Files\CSVFILE.CSV

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

param(
    $Vendor,
    $Pages,
    $Sender,
    $Recipient
)

$Line = '"{0}","{1}","{2}","{3}"' -f ($Vendor -replace '"','""'),($Pages -replace '"','""'),($Sender -replace '"','""'),($Recipient -replace '"','""')

$Line | Add-Content C:\Files\CSVFILE.CSV
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...