PowerShell-CSV (импорт/экспорт) удаляет кавычки

у меня есть CSV-файл с разделителями табуляции (тест.txt) с содержанием, подобным следующему (мой CSV не имеет заголовка):

12.33   Apple   Orange  "this is" great "to eat"
10.99   Pear    Lemon   "this" is an - "aquired taste"

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

$Headers = "price","item1","item2","desc"
[array]$arrCSVobjects = import-csv "test.txt" -Delimiter "`t" -Header $Headers

(или)

$Headers = "price","item1","item2","desc"
[array]$arrCSVobjects = Get-Content -Path "test.txt " | Out-String | ConvertFrom-CSV -Delimiter "`t" -Header $Headers

независимо от того, как я подхожу к этому, PS продолжает хотеть удалить начальные (ведущие) кавычки из элементов DESC в массиве (и я в конечном итоге получаю результаты, похожие на это – которые не совпадают с оригиналом data):

price    item1    item2    desc
-----    -----    -----    ----
12.33    Apple    Orange   this is great "to eat"
10.99    Pear     Lemon    this is an - "aquired taste"

при сравнении с исходными данными, вы можете видеть, что некоторые кавычки отсутствуют. Как я могу остановить (предотвратить) PS от удаления кавычек из таких элементов? Мне нужно импортировать CSV, манипулировать данными, а затем экспортировать их обратно в другой CSV. Каждый раз, когда я ищу в интернете ответ, я продолжаю получать результаты о том, как удалить кавычки, но я не могу найти, как их сохранить. Я не хочу удалять кавычки в процессе импорта или экспорта.

заранее спасибо,

STGdb

26
задан STGdb
02.01.2023 6:57 Количество просмотров материала 3164
Распечатать страницу

1 ответ

ваш файл не является допустимым CSV. (Ну, нет официального стандарта, но есть de facto один.) Двойные кавычки имеют особое значение в CSV для окружающих полей. Те, которые не являются "окружающими", должны быть каким-то образом спасены, обычно используя удвоение их, например:

12.33   Apple   Orange  """this is"" great ""to eat"""

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

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

gc .\test.txt | 
    % { $f = $_ -split "`t"; [pscustomobject]@{price=$f[0];item1=$f[1];item2=$f[2];desc=$f[3]} }

выход:

price item1 item2  desc
----- ----- -----  ----
12.33 Apple Orange "this is" great "to eat"
10.99 Pear  Lemon  "this" is an - "aquired taste"
3
отвечен dangph 2023-01-03 14:45

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх