Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Удалить иероглифы

Ответить
Настройки темы
CMD/BAT - Удалить иероглифы

Новый участник


Сообщения: 27
Благодарности: 2

Профиль | Отправить PM | Цитировать


Здравствуйте, есть большой файл (построчный). Где-то в середине могут попадаться всякие иероглифы или эмодзи. Как сделать так, чтобы кроме символов, цифр и спецсимволов в файле ничего не осталось?

Отправлено: 16:20, 10-02-2023

 

Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


А где кусочек файла?

Примерно так. Но не точно:
Код: Выделить весь код
"Thats a nice, joke ������ ��? Yes!" -replace '(?<=\s|^)\W+?(?=\s|$)'
PS. Смайлики исчезли.

Отправлено: 23:13, 10-02-2023 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

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


Новый участник


Сообщения: 27
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
А где кусочек файла? »
Ну примерно такие строки в файле: "1.txt"
Цитата:
5�ἱﺖخGρ慭εο�γλﮢل▒ύO�οςφ慭óO¶Ã���D��4
Нужно, чтобы кроме кириллицы, латиницы, арабских цифр и спецсимволов обычных ничего не осталось:
Цитата:
ёйцукенгшщзхъфывапролджэячсмитьбю
ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ
qwertyuiopasdfghjjklzxcvbnm
QWERTYUIOPASDFGHJKLZXCVBNMM
1234567890
!@#$%^&*()_+-=/;:'"\|,./<>?`~[]{}

Отправлено: 11:49, 11-02-2023 | #3


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


Цитата 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
Это сообщение посчитали полезным следующие участники:

Отправлено: 13:32, 11-02-2023 | #4


Аватара для YuS_2

Crazy


Contributor


Сообщения: 1177
Благодарности: 491

Профиль | Отправить PM | Цитировать


Цитата Asdshka:
ёйцукенгшщзхъфывапролджэячсмитьбю
ЙЦУКЕНГШЩЗХЪФЫВАПРОЛДЖЭЯЧСМИТЬБЮ
qwertyuiopasdfghjjklzxcvbnm
QWERTYUIOPASDFGHJKLZXCVBNMM
1234567890
!@#$%^&*()_+-=/;:'"\|,./<>?`~[]{} »
Код: Выделить весь код
$file = '.\1.txt'
$out = 'out.txt'
(gc $file -enc utf8) -replace '[^-a-zа-яё\d!@#$%^&*()_+=/;:"\\|,./<>?`~\[\]{}\x27 ]'|out-file $out -enc utf8

-------
scio me nihil scire. Ѫ

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:13, 11-02-2023 | #5


Аватара для DJ Mogarych

fascinating rhythm


Moderator


Сообщения: 6527
Благодарности: 1480

Профиль | Отправить PM | Цитировать


Код: Выделить весь код
$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

-------
Powershell 7.x | Powershell 5.1 | ffmpeg (docs)


Последний раз редактировалось DJ Mogarych, 11-02-2023 в 14:41.

Это сообщение посчитали полезным следующие участники:

Отправлено: 14:35, 11-02-2023 | #6


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


С replace в 28 раз быстрее. на 10K строк (из примера) 1 сек против 28.

Последний раз редактировалось Foreigner, 11-02-2023 в 15:18.


Отправлено: 14:48, 11-02-2023 | #7


Новый участник


Сообщения: 27
Благодарности: 2

Профиль | Отправить PM | Цитировать


А если мне нужно удалить ещё и просто спецсимволы, но после первого знака ":" или ";"
То есть строки могут быть
ads/ghvj:adg23@14hjbkn
ads/ghvj;adg23@14hjbkn

Отправлено: 20:24, 11-02-2023 | #8


Новый участник


Сообщения: 27
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Foreigner:
-replace '(?<=[^:;]+)[^-a-zа-яё\d!@#$%^&*()_+=/;:"\\|,./<>?`~\[\]{}\x27 ]' »
Немного не то, надо удалить спецсимволы после разделителя, а разделитель либо ":" либо ";", могут оба присутствовать

Отправлено: 22:00, 11-02-2023 | #9


Ветеран


Сообщения: 1754
Благодарности: 965

Профиль | Цитировать


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

Последний раз редактировалось Foreigner, 11-02-2023 в 23:12.


Отправлено: 22:19, 11-02-2023 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Удалить иероглифы

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
2003/XP/2000 - Excel | Иероглифы no0obs Microsoft Office (Word, Excel, Outlook и т.д.) 14 05-12-2015 11:08
китайские иероглифы! demtix Лечение систем от вредоносных программ 1 07-11-2015 00:34
Почта - Иероглифы 3DpacTe Windows Live (архив) 1 29-08-2012 12:07
Иероглифы Optimus Хочу все знать 2 13-11-2008 07:04
Иероглифы Seddos О сайте и форуме 5 21-09-2002 07:52




 
Переход