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

Компьютерный форум OSzone.net » Компьютеры + Интернет » Хочу все знать » Способ поиска и замены текста, с уникальным значением каждой замены.

Ответить
Настройки темы
Способ поиска и замены текста, с уникальным значением каждой замены.

Аватара для vk_k14m@vk

Старожил


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


Конфигурация

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


Сегодня у меня странный вопрос. Допустим есть текстовый файл с огромным количество подобного текста
Код: Выделить весь код
[$gameVariables.value(111)][72] = '日本語のテキスト'
Этот текст нужно найти, и заменить на подобный
Код: Выделить весь код
[$gameVariables.value(111)][72] = 'Русские буквы'
Но таким образом, что б каждая последующая замена чем то отличалась от предыдущей. Например так:
Код: Выделить весь код
[$gameVariables.value(111)][72] = 'Русские буквы 1'
[$gameVariables.value(111)][72] = 'Русские буквы 2'
[$gameVariables.value(111)][72] = 'Русские буквы 3'
Код: Выделить весь код
[$gameVariables.value(111)][72] = 'Русские буквы a'
[$gameVariables.value(111)][72] = 'Русские буквы b'
[$gameVariables.value(111)][72] = 'Русские буквы c'
Код: Выделить весь код
[$gameVariables.value(111)][72] = 'Русские буквы +'
[$gameVariables.value(111)][72] = 'Русские буквы ++'
[$gameVariables.value(111)][72] = 'Русские буквы +++'
Можно ли это сделать и если да то каким образом? Я искал способ для notepad++, но он, кажется, подобное не умеет...

-------
Взялся отвечать, отвечай до конца!


Отправлено: 13:03, 15-11-2021

 

Забанен


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

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


нет, похоже такое она не умеет. подробней почитал что нужно, не оно...

Отправлено: 16:58, 15-11-2021 | #11



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

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


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

fascinating rhythm


Moderator


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

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


Powershell:
Код: Выделить весь код
$file = "D:\temp\japanese.txt"
$from = "日本語のテキスト"
$to = "Русские буквы"

$c = 1
$result = gc "$file" -Encoding UTF8 |% {
$_ -replace "$from","$($to + " $c")"
$c++
}
$result |Set-Content "$file" -Encoding UTF8

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

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

Отправлено: 09:01, 16-11-2021 | #12


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата DJ Mogarych:
% { »
Тут присутствует одна "засада"... если в одной строке будет две замены, они будут с одним номером счетчика...

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

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

Отправлено: 09:36, 16-11-2021 | #13


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

fascinating rhythm


Moderator


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

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


В ТЗ об этой ситуации ничего не сказано, что мы будем додумывать за заказчика.

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


Отправлено: 09:39, 16-11-2021 | #14


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата DJ Mogarych:
что мы будем додумывать за заказчика. »
тут - под спойлером "Вся строчка может выглядеть так"
и собственно, об уникальности замен:
Цитата vk_k14m@vk:
Суть не в том что б пронумеровать яблоки и груши от 1 до n, а в том что б просто у каждой груши и яблока была своя цифра. Что б не было двух груш и двух яблок с одинаковой цифрой. »
так что, строго по ТЗ

DJ Mogarych,
На первый взгляд:
можно отлавливать совпадения:
Код: Выделить весь код
(sls -lit "test.txt" -patt 'шаблон' -all).matches
и по индексу менять по шаблону с добавлением уникального счетчика...
Сейчас убегаю, позже попробую что-нибудь накропать, если никто не отпишется...

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

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

Отправлено: 09:51, 16-11-2021 | #15


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

fascinating rhythm


Moderator


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

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


Да, невнимательно читал историю вопроса, извиняюсь.

Тогда вот так:
Код: Выделить весь код
$file = "D:\temp\japanese.txt"
$from = "日本語のテキスト"
$to = "Русские буквы"

$script:c = 0
$result = gc "$file" -Encoding UTF8 |% {
[regex]::Replace($_, $from, {$script:c++; $to + " $script:c"})
}
$result |Set-Content "$file" -Encoding UTF8

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


Последний раз редактировалось DJ Mogarych, 16-11-2021 в 13:37. Причина: не, лучше с нуля всё же

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

Отправлено: 13:20, 16-11-2021 | #16


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата DJ Mogarych:
Тогда вот так »
Сделал сначала через remove-insert, потом подумал, что есть ведь replace()... собрался сюда постить, а тут уже есть, что-то подобное...
Но для разнообразия, пригодится (в моем варианте есть упрощение для PS 6.0 и выше):
Код: Выделить весь код
$filein = '.\test.txt'
$fileout = '.\test_out.txt'
$find = '性交回数'
#$find = read-host 'введите строку замены, что'
$replace = 'ТЕКСТ'
#$replace = read-host 'ведите строку замены, чем'
$global:cnt = 1 
$data = gc $filein -enc utf8 -raw
if ($psversiontable.psversion.major -gt 5){
	$data = $data -replace $find, {$replace + " " +$cnt++}
} else {
	$data = [regex]::replace($data,$find,{$replace + " " + $global:cnt++})
}
$data|out-file $fileout -enc utf8

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


Последний раз редактировалось YuS_2, 16-11-2021 в 19:57.


Отправлено: 14:35, 16-11-2021 | #17


Аватара для vk_k14m@vk

Старожил


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

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


Цитата DJ Mogarych:
Powershell: »
Не годится от слова совсем.
$from = "日本語のテキスト"
А что если после, или перед "日本語のテキスト" еще какой-то текст? Тогда перевод окажется в корне не верным. А может и вовсе сломать какой-то важный скрипт.
Искать нужно именно Variables.value(111)][72] = '夜這い'
Если это окажется Variables.value(111)][72] = 'の夜這い' или Variables.value(111)][72] = '夜這い日' или Variables.value(111)][73] = '夜這い' то замена уже неправильная

-------
Взялся отвечать, отвечай до конца!


Отправлено: 17:10, 16-11-2021 | #18


Аватара для YuS_2

Crazy


Contributor


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

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


Цитата vk_k14m@vk:
Не годится от слова совсем. »
"Железный" аргумент!

Цитата vk_k14m@vk:
А что если после, или перед »
так и впишите то, что надо искать, также, как и то, чем надо менять... только там шаблон регулярного выражения, т.е. спецсимволы необходимо экранировать:
Код: Выделить весь код
...
$find = "(?<=Variables\.value\(111\)\]\[72\] *\= *')夜這い(?=')"
$replace = 'ТЕКСТ ДЛЯ ЗАМЕНЫ'
...
любую часть шаблона можно вынести в интерактивный запрос на ввод и вводить его руками, либо копированием...

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


Отправлено: 19:39, 16-11-2021 | #19


Аватара для vk_k14m@vk

Старожил


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

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


Цитата YuS_2:
так и впишите то, что надо искать, также, как и то, чем надо менять... только там шаблон регулярного выражения, т.е. спецсимволы необходимо экранировать:
Код:
...
$find = "(?<=Variables\.value\(111\)\]\[72\] *\= *')夜這い(?=')"
$replace = 'ТЕКСТ ДЛЯ ЗАМЕНЫ'
...
любую часть шаблона можно вынести в интерактивный запрос на ввод и вводить его руками, либо копированием... »
Если б я понимал как этот шаблон работает и как его менять под свои нужны, я бы не задавал тут вопросы. То что ты знаешь как оно работает не говорит о том что и остальные знают. Для меня это просто набор символов которые непонятно что делают.

В данном случае нужно либо писать полностью рабочий шаблон который сам по себе делает то что нужно без каких либо изменений.
Либо полностью объяснять каждый символ в шаблоне что б любой кто это прочитает понимал как он работает и как его можно изменить.

-------
Взялся отвечать, отвечай до конца!


Отправлено: 20:01, 16-11-2021 | #20



Компьютерный форум OSzone.net » Компьютеры + Интернет » Хочу все знать » Способ поиска и замены текста, с уникальным значением каждой замены.

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
TextReplace - Программа для поиска и замены текста в любых файлах AZJIO AutoIt 6 02-02-2018 20:56
[решено] Автоматизация замены текста в конфиге. ANIMka Хочу все знать 22 27-01-2017 19:10
Прочие - Программа для поиска и замены файлов volod3000 Программное обеспечение Windows 10 26-06-2015 18:33
CMD/BAT - .bat'ик для поиска и замены (не горит) VOLKINET Скриптовые языки администрирования Windows 2 09-02-2011 08:24
CMD/BAT - [решено] есть ли способ быстрого поиска текста в файле ? mitiya Скриптовые языки администрирования Windows 2 27-03-2010 23:33




 
Переход