Использование powershell в csv doc требует итерации и вставки символа - PullRequest
1 голос
/ 21 июля 2011

Итак, мой CSV-файл выглядит примерно так:

J|T|W
J|T|W
J|T|W

Я бы хотел перебрать, скорее всего, используя регулярное выражение, чтобы после двух каналов и содержимого \ |. + {2}, и вставить символ табуляции `t.

Я предполагаю, что буду использовать get-content для циклического прохождения, но я не уверен, куда идти дальше.

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

-Спасибо

Ответы [ 2 ]

3 голосов
/ 21 июля 2011

Хорошо, я переместу обсуждение комментариев к ответу, так как кажется, что это потенциально правильное решение:

 Import-csv .\test.csv -Delimiter '|' -Header 'One', 'two', 'three' | %{$_.Three = "`t$($_.Three)"; $_} | Export-CSV .\test_result.cs

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

 Import-csv .\test.csv -Delimiter '|' -Header (1..$fieldCount) | %{$_.$fieldCount = "`t$($_.$fieldCount)"; $_} | Export-CSV .\test_result.cs
0 голосов
/ 21 июля 2011

В PowerShell вы можете использовать оператор -replace с регулярным выражением, например:

$c = Get-Content foo.csv | Foreach {$_ -replace '<regex_here>','new_string'}
$c | Out-File foo.csv -encoding ascii

Обратите внимание, что в new_string вы можете ссылаться на группы захвата, используя $1, но вы захотите поместитьэта строка в одинарных кавычках, поэтому PowerShell не будет пытаться интерпретировать $1 как ссылку на переменную.

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