Удаление неанглийских слов / символов из файла .csv с помощью Powershell? - PullRequest
0 голосов
/ 12 апреля 2019

Я экспортировал набор данных IoT со соскребенным контентом со своих веб-сайтов в файл .csv (назовем data.csv).Часть этого содержимого кодируется на японском / китайском / различных европейских языках и отказывается открываться, когда программа, в которую я импортирую его, обнаруживает один из этих специальных символов.

Есть ли способ использовать PowerShell для удалениявсе неанглийские кодировки из csv и экспортировать их как копию?Я имею в виду, оставить az, AZ, 0-9, запятые, вопросительные знаки, скобки и т. Д., Но удалить все, что не является английским из набора данных?

Я пытался сохранить файл как utf-8 кодировки из Блокнота, но это не исправило.

1 Ответ

1 голос
/ 12 апреля 2019

Может сработать регулярное выражение, соответствующее шестнадцатеричному значению символа. Наивный подход состоит в том, чтобы просто заменить любой недопустимый символ на тот, который работает. Обычно - используется как символ

В качестве примера данных рассмотрим некоторые бессмысленные CSV, содержащие японские и европейские буквы åäöè:

id,data
1,Lorem内ょへconsectetur  
2,ipsum 球経風adipiscing
3,dolor 
4,sitåäöèelit
5,amet

Импортируйте файл как CSV, пройдитесь по циклу и замените каждый не-ASCII символ, скажем, тире. Регулярное выражение [^\x00-\x7A] будет соответствовать символам с шестнадцатеричным значением от 00 до 122 или от nul до z. В зависимости от вашего варианта использования настройте диапазон соответствующим образом. Вот так

$data = Import-Csv C:\temp\mixed.csv

$data | % {
    $_.data = $_.data -replace "[^\x00-\x7A]","-"
}

$data

# Output
id data
-- ----
1  Lorem---consectetur
2  ipsum ---adipiscing
3  dolor
4  sit-----elit
5  amet

Этот подход имеет существенный недостаток: он теряет информацию. Рассмотрим следующие данные:

1,sensor-内
2,sensor-ょ
3,sensor-へ

Выходные данные просто разделили бы кандзи, поэтому было бы три элемента, содержащих sensor--. Если это не хорошо, решите, какой тип преобразования необходим для символов, не относящихся к ASCII. Преобразовать значения в обычный гекс? Пропустить это вообще? Транслитерировать на латинский алфавит?

...