Добавление строки данных в файл CSV через Powershell - PullRequest
0 голосов
/ 25 ноября 2018

У меня есть скрипт Powershell, который создает файл .csv с именами и адресами электронной почты.Я хотел бы иметь возможность добавить строку с заголовком в начало файла.

Я могу сделать это с помощью текстового файла, но по какой-то причине у меня не получается с файлом .csv.Предложения?

[string]$FileDS = Get-Date -Format "yyyyMMdd"
[string]$outFile = "${outpath}\${members}_${FileDS}.csv"
New-Item -ItemType file $outfile -Force
$object | export-csv -path $outfile

Ответы [ 2 ]

0 голосов
/ 25 ноября 2018

Формат CSV

Существует стандарт IETF RFC 4180, который определяет, как генерировать файл CSV и что он может и не может содержать.Чтобы ответить на ваш вопрос напрямую, нет способа добавить «заголовок» в файл CSV.Чтобы подвести итог спецификации, ваш файл должен иметь следующее

  1. Каждая строка данных разделяет данные на столбцы с помощью разделителя запятых (val1, val2, val3)
  2. Каждая строказаканчивается и начинается новый с использованием возврата каретки (val1, val2, val3 CRLF)
  3. Последняя строка в файле не содержит возврата каретки
  4. Можно добавить необязательную строку заголовкатак же, как и обычная строка данных, и будет устанавливаться путем включения параметра заголовка

. Как вы можете видеть, стандартного способа установки «заголовка» не существует.Однако, если вы ссылаетесь на «заголовок» как на «заголовок», вы можете добавить его, используя следующие символы:

$file = import-csv $outfile -Header a , b , c | export-csv $file

Где a, b, c - ваши заголовки.

Формат данных

В итоге ваши данные должны выглядеть следующим образом

Header1, Header2, Header3 CRLF
value11, value12, value13 CRLF
value21, value22, value23 CRLF
value31, value32, value32

Строка заголовка указывается как нечто отдельное от строк данных, включая следующий параметр mimetype

text/csv; header=present

В отличие от

text/csv; header=absent

Как вы можете сказать, единственными ограничениями являются параметр mimetype, разделитель и возврат каретки.Данные поля заключаются в двойные кавычки, если данные в этом поле содержат разрыв строки, запятую или двойные кавычки.Чтобы разделить Mimetype немного больше, тип мультимедиа - текст, подтип - csv и два необязательных параметра: header и charset.

Поскольку в спецификации явно указаны специальные / зарезервированные символы, а также необязательные параметрыЯ чувствую себя в безопасности, говоря, что нет способа добавить строку заголовка.

Дополнительная информация

Поскольку в вашем первоначальном посте говорилось о "заголовке", который не определен в спецификации, я приложил все усилия, чтобы ответить на ваш вопрос в меру своих возможностей.CSV Format - это конкретная реализация стандарта Tabluar Data.Существует несколько различных форматов табличных данных, и такие организации, как W3C и OKI, создали стандартизацию, включающую больше функциональных возможностей, чем стандарт RFC 4180.

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

Если у вас есть дополнительные вопросы, не стесняйтесь добавлять комментарии, и я сделаю все возможное, чтобы ответить.

Ссылки

Следующие ссылки приведут вас к официальной спецификации для трех табличных форматов данных.В случае сомнений я бы определенно использовал стандарт IETF, поскольку он, безусловно, является наиболее распространенным, однако я включил W3C и спецификацию OKI на случай, если ваше приложение-потребитель его поддерживает

  1. https://tools.ietf.org/html/rfc4180
  2. https://frictionlessdata.io/specs/tabular-data-package/
  3. https://www.w3.org/TR/tabular-data-model/
0 голосов
/ 25 ноября 2018

Если вы хотите добавить в верхнюю строку CSV:

[array]$newRow = "Everything on the new row"
$csv = Get-Content $outFile
$newCSV = $newRow + $csv | Out-File $outFile

Чтобы добавить в CSV без удаления старых данных:

$newRow | Out-File $outFile -Append

Надеюсь, это вам поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...