Удалить иероглифы
Здравствуйте, есть большой файл (построчный). Где-то в середине могут попадаться всякие иероглифы или эмодзи. Как сделать так, чтобы кроме символов, цифр и спецсимволов в файле ничего не осталось?
|
А где кусочек файла?
Примерно так. Но не точно:
Код:
"Thats a nice, joke ������ ��? Yes!" -replace '(?<=\s|^)\W+?(?=\s|$)'
PS. Смайлики исчезли.
|
Ну примерно такие строки в файле: "1.txt"
Цитата:
5�ἱﺖخGρ慭εο�γλﮢل▒ύO�οςφ慭óO¶Ã���D��4
|
Нужно, чтобы кроме кириллицы, латиницы, арабских цифр и спецсимволов обычных ничего не осталось:
Цитата:
ёйцукенгшщзхъфывапролджэячсмитьбю
ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ
qwertyuiopasdfghjjklzxcvbnm
QWERTYUIOPASDFGHJKLZXCVBNMM
1234567890
!@#$%^&*()_+-=/;:'"\|,./<>?`~[]{}
|
|
Цитата:
Цитата Asdshka
Нужно, чтобы кроме кириллицы, латиницы, арабских цифр и спецсимволов обычных ничего не осталось »
|
Попробуйте, правда не уверен на счет производительности. Но в принципе это возможно оптимизировать
Powershell:
Код:
$str = [char[]](Get-Content 1.txt | Out-String)
$chars = [char[]]("ёйцукенгшщзхъфывапролджэячсмитьб" + `
"юЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБ" + `
"ЮqwertyuiopasdfghjjklzxcvbnmQWER" + `
"TYUIOPASDFGHJKLZXCVBNMM123456789" + `
"0!@#$%^&*()_+-=/;:'`"``\|,./<>?~[]{}`n`r`t ")
-join ($str | ? { $_ -in $chars }) | Set-Content 2.txt
|
Цитата:
Цитата Asdshka
ёйцукенгшщзхъфывапролджэячсмитьбю
ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ
qwertyuiopasdfghjjklzxcvbnm
QWERTYUIOPASDFGHJKLZXCVBNMM
1234567890
!@#$%^&*()_+-=/;:'"\|,./<>?`~[]{} »
|
Код:
$file = '.\1.txt'
$out = 'out.txt'
(gc $file -enc utf8) -replace '[^-a-zа-яё\d!@#$%^&*()_+=/;:"\\|,./<>?`~\[\]{}\x27 ]'|out-file $out -enc utf8
|
DJ Mogarych |
11-02-2023 14:35 3002917 |
Код:
$from = "C:\temp\test.txt"
$to = "C:\temp\result.txt"
$chars = [char[]](33..126+1040..1103+1025+1105)
$result = foreach ($str in (gc $from)) {
-join (($str).ToCharArray() |% {if ($_ -in $chars) {$_}})
}
$result |Out-File $to -Encoding utf8
Можно сделать отбор символов поизящнее, например, по категориям: https://lazywinadmin.com/2015/08/pow...haracters.html
|
С replace в 28 раз быстрее. на 10K строк (из примера) 1 сек против 28.
|
А если мне нужно удалить ещё и просто спецсимволы, но после первого знака ":" или ";"
То есть строки могут быть
ads/ghvj:adg23@14hjbkn
ads/ghvj;adg23@14hjbkn
|
Цитата:
Цитата Foreigner
-replace '(?<=[^:;]+)[^-a-zа-яё\d!@#$%^&*()_+=/;:"\\|,./<>?`~\[\]{}\x27 ]' »
|
Немного не то, надо удалить спецсимволы после разделителя, а разделитель либо ":" либо ";", могут оба присутствовать
|
Asdshka, Я ошибся и удалил сообщение. Тут придется не весь текст "махом" обрабатывать, а построчно, что дольше, как-то так (не тестировал):
Код:
$content =
foreach ($line in (Get-Content file.txt))
{
$a, $b = $line -split '(?<=[^:;]+[:;])(?=.+)'
-join ($a, $($b -replace '[^-a-zа-яё\d!@#$%^&*()_+=/;:"\\|,./<>?`~\[\]{}\x27 ]'))
}
Set-Content out.txt $content
|
Тогда вопрос: насколько большой?
Цитата:
Цитата Asdshka
надо удалить спецсимволы после разделителя »
|
Вы тогда настройтесь, сконцентрируйтесь и составьте полные условия задачи в целом...
|
Время: 00:49.
© OSzone.net 2001-