Powershell L oop и Replace (чтение из текстового файла) - PullRequest
2 голосов
/ 31 января 2020

Я преобразовал Excel в CSV и пытаюсь очистить все символы мусора (не-engli sh), используя ForEach-Object l oop с заменой.

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

Моя строка кода становится очень длинной. Есть ли более эффективный способ сделать это, не имея все трубы? Я использую Powershell ISE.

Пример:

(Get-Content C:\Users\myexcel.csv) | ForEach-Object { $_ -replace '\W',' '} |`
ForEach-Object { $_ -replace 'ÿ',' '} | ForEach-Object { $_ -replace 'À',' '} |`
ForEach-Object { $_ -replace 'Ô',' '}  | ForEach-Object { $_ -replace 'õ',' '}  |`
ForEach-Object { $_ -replace 'ý',' '} > C:\Users\newfile.csv

Ответы [ 2 ]

2 голосов
/ 31 января 2020

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

EG

(Get-Content "C:\Users\myexcel.csv") -replace '[ÿÀõÔý]',' ' | Out-file "C:\Users\newfile.csv"

[ и ] обозначают набор символов, соответствующий любому из символов внутри это.

0 голосов
/ 01 февраля 2020

Что не так с иностранными символами? Вы можете указать другую кодировку с помощью export-csv. Вы можете объединить несколько замен. Вам не нужны обратные кавычки, чтобы продолжить строки. Трубы делают это сами. Вы можете продолжить с запятой тоже. Я предпочитаю set-content '>' или вне файла. Out-file по умолчанию использует кодировку Unicode. Если это другой файл, вам не нужны круглые скобки, чтобы сначала загрузить весь файл.

Get-Content C:\Users\myexcel.csv | 
  ForEach { $_ -replace '\W',' ' -replace 'ÿ',' ' -replace 'À',' ' -replace 'Ô',
  ' ' -replace 'õ',' ' -replace 'ý',' ' } | 
  Set-Content C:\Users\newfile.csv

Там есть или "|" стиль регулярных выражений тоже:

Get-Content C:\Users\myexcel.csv | 
  ForEach { $_ -replace '\W|ÿ|À|Ô|õ|ý',' ' } | 
  Set-Content C:\Users\newfile.csv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...