С Новым годом! Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/29: Рейтинг темы: голосов - 29, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 28.03.2017
Сообщений: 10

Замена слов в текстовом файле

08.10.2017, 17:11. Показов 6318. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые знатоки ,прошу вашей помощи.Нужен батник который производит замену слов на определённое слово.В идеале было бы если бы замена производилась в словах которые идут после запятой.
Пример
было:
прекрасен город,sankt-peterburg
стало:
прекрасен город,Санкт-Петербург
в тексте могут быть такие же слова но перед ними нет запятой и эти слова менять не надо.
Пример
было:
прекрасен город sankt-peterburg
стало:
прекрасен город sankt-peterburg
Вот что я нашёл на просторах инета.
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@echo off
for /f "tokens=*" %%a in ('more^<File.txt') do call :_replace %%a
goto eof
:_replace
set i=%* 
set i=%i:,saint-petersburg =,Санкт-Петербург%
set i=%i:,saint_petersburg =,Санкт-Петербург%
set i=%i:,sankt-peterburg =,Санкт-Петербург%
set i=%i:,sankt_peterburg =,Санкт-Петербург%
set i=%i:,sanct-peterburg =,Санкт-Петербург%
set i=%i:,sanct_peterburg =,Санкт-Петербург%
set i=%i:,tsargrad =,Царьград%
set i=%i:,tsar-grad =,Царьград%
set i=%i:,tsar_grad =,Царьград%
echo %i%>>C:\File2.txt
(это небольшая часть базы)в некоторых случаях батник работает некорректно и сам батник получается громоздкий.
В идеале было бы если бы батник имел такую структуру
Пример:
Санкт-Петербург(слово на которое менять) = saint-petersburg,sankt-peterburg,sankt_peterburg,sanct-peterburg,(список слов которые менять)
Помогите пожалуйста.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.10.2017, 17:11
Ответы с готовыми решениями:

Замена слов в текстовом файле
Здравствуете! Очень требуется помощь. Вот проблема. Нужен батник, который будет менять в файлах, которые находятся в папке QQQ с...

Замена слов в текстовом файле на указанные рандомные(случайные)
Всем доброго времени суток! за основу мною было взято это: for /f &quot;tokens=*&quot; %%a in ('more^&lt;itog.txt') do call :_replace %%a ...

Замена букв в текстовом файле
Здравствуете! требуется помощь. Нужен батник, который будет менять буквы в тексте, нужно заменить все Д на Г„ Г на Г€

12
 Аватар для ZoOoO
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
09.10.2017, 11:33
Конечно он будет огромный.Надо же объяснить компу когда надо заменять слово на Санкт-Петербург,а когда на Царьград,а когда на Улан-Удэ и так далее.
0
4340 / 2130 / 661
Регистрация: 26.04.2015
Сообщений: 6,823
09.10.2017, 12:26
android2222,
ini с шаблоном, считываем с автозаменой.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
09.10.2017, 13:52
Лучший ответ Сообщение было отмечено android2222 как решение

Решение

Цитата Сообщение от android2222 Посмотреть сообщение
Вот что я нашёл на просторах инета
А вот что я:
# Составляем таблицу сопоставлений регулярных выражений и текста для замены
PowerShell
1
2
3
4
5
6
7
8
9
10
$regex=@{
    "(?<=,)(sa.+?t)?(_|-|\s)?(peter(s)?burg)"="Санкт-Петербург";
    "(?<=,)nizhni(i|j)?(_|-|\s)novgorod"="Нижний Новгород";
    '(?<=,)nizhni(i|j)?(_|-|\s)tagil'="Нижний Тагил";
    }
 
 
# берем, к примеру, такой текст: 
$text = cat "файл.txt" -enc Default
echo $text
Code
1
2
3
4
5
6
7
8
Прекрасен город,saint-petersburg
Прекрасен город,sankt-peterburg
Прекрасен город,sankt_peterburg
Прекрасен город,sanct-peterburg 
Прекрасен город,Sanct Peterburg
Прекрасен город,Nizhni Tagil
Прекрасен город,Nizhnii Novgorod
Не прекрасен город Sanct Peterburg
PowerShell
1
2
3
4
5
6
# запускаем  цикл замены
foreach ($reg in $regex.keys) {
    $text = $text -replace $reg,$regex[$reg]
}
# смотрим, что получилось
echo $text
А получилось вот что:
Code
1
2
3
4
5
6
7
8
Прекрасен город,Санкт-Петербург
Прекрасен город,Санкт-Петербург
Прекрасен город,Санкт-Петербург
Прекрасен город,Санкт-Петербург 
Прекрасен город,Санкт-Петербург
Прекрасен город,Нижний Тагил
Прекрасен город,Нижний Новгород
Не прекрасен город Sanct Peterburg
Ну и чтобы все это сохранить, достаточно сделать так:
PowerShell
1
$text|Out-File "файл.txt" -enc Default
Весь код достаточно положить в файл с расширением .ps1 и запустить командой (в батнике или в cmd):
powershell -exec bypass "полный путь до скрипта.ps1"

P.S. Поправил код на проверку наличия запятой.
1
0 / 0 / 0
Регистрация: 28.03.2017
Сообщений: 10
09.10.2017, 20:03  [ТС]
Garry Galler,
Не получилось у меня, или я делаю неправильно.
Вот так должно быть ?
PowerShell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$regex=@{
    "(?<=,)(sa.+?t)?(_|-|\s)?(peter(s)?burg)"="Санкт-Петербург";
    "(?<=,)nizhni(i|j)?(_|-|\s)novgorod"="Нижний Новгород";
    '(?<=,)nizhni(i|j)?(_|-|\s)tagil'="Нижний Тагил";
    }
 
 
# берем, к примеру, такой текст: 
$text = cat "zam.txt" -enc Default
echo $text
# запускаем  цикл замены
foreach ($reg in $regex.keys) {
    $text = $text -replace $reg,$regex[$reg]
}
# смотрим, что получилось
echo $text
$text|Out-File "zam2.txt" -enc Default
всё это сохраняем в формате ps1 под именем zam1

zam.txt - текст который будем менять.
zam2.txt - конечный результат.
Далее создаём батник который будет запускать ps1
Windows Batch file
1
powershell -exec bypass "C:\zam1.ps1"
Я правильно понял ? Помогите пожалуйста.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
09.10.2017, 20:20
Цитата Сообщение от android2222 Посмотреть сообщение
Я правильно понял
Да. Но пути до файлов txt в скрипте нужно указывать полные. Либо добавить в скриптe в самом начале команду:
PowerShell
1
cd "каталог файлов"
чтобы скрипт искал файлы в этом каталоге.

Добавлено через 5 минут
И еще - у вас кодировка исходного файла какая? У меня указано Default, что означает стандартную для русскоязычной локализации windows win-1251 или ANSI (как она может указываться в текстовых редакторах). Если у вас другая - напишите. Я скажу, как ее обозначить в скрипте.
1
 Аватар для ZoOoO
226 / 211 / 70
Регистрация: 09.02.2016
Сообщений: 1,040
09.10.2017, 21:07
Еще надо включить разрешение на исполнение скриптов PS.Оно по умолчанию выключено.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
09.10.2017, 21:16
ZoOoO,
powershell -exec bypass
Это отключает проверку разрешений.
1
0 / 0 / 0
Регистрация: 28.03.2017
Сообщений: 10
11.10.2017, 08:32  [ТС]
Garry Galler,
Вот такая ошибка получается.
Миниатюры
Замена слов в текстовом файле  
0
Любознательный
 Аватар для YuS_2
7404 / 2251 / 360
Регистрация: 10.03.2016
Сообщений: 5,210
11.10.2017, 08:58
Цитата Сообщение от android2222 Посмотреть сообщение
Вот такая ошибка получается.
Там ведь красным по-русски написано...
и вопрос выше был задан:
Цитата Сообщение от Garry Galler Посмотреть сообщение
у вас кодировка исходного файла какая?
т.к. в Вашей системе PoSh версии 2.0, то замените Default на String, либо совсем уберите из кода -enc Default
1
0 / 0 / 0
Регистрация: 28.03.2017
Сообщений: 10
12.10.2017, 13:07  [ТС]
Garry Galler, YuS_2,
Огромное спасибо вам,поменял -enc Default на -enc UTF8.
При создании таблицы сопоставлений заметил такую неприятность,
например, есть строка sankt_peterburg и sankt_peterburg_russia код

"(?<=,)(sa.+?t)?(_|-|\s)?(peter(s)?burg)"="Санкт-Петербург";

меняет название в обоих случаях, получаем
1)Санкт-Петербург
2)Санкт-Петербург_russia
Почему происходит замена слова во втором случае, ведь в таблице прописано sankt_peterbur а не sankt_peterburg_russia ?
Как можно это исправить ?
0
Любознательный
 Аватар для YuS_2
7404 / 2251 / 360
Регистрация: 10.03.2016
Сообщений: 5,210
12.10.2017, 13:38
Цитата Сообщение от android2222 Посмотреть сообщение
"(?<=,)(sa.+?t)?(_|-|\s)?(peter(s)?burg)"="Санкт-Петербург";
PowerShell
1
2
3
...
"(?<=,)(sa.+?t)?(_|-|\s)?(peter(s)?burg)(?=\s)"="Санкт-Петербург"
...
Добавлено через 3 минуты
Цитата Сообщение от android2222 Посмотреть сообщение
Почему происходит замена слова во втором случае, ведь в таблице прописано sankt_peterbur а не sankt_peterburg_russia ?
Он заменял ровно то, что прописано в шаблоне, независимо от того, что следует за совпадением по шаблону.
0
Эксперт Python
5438 / 3859 / 1215
Регистрация: 28.10.2013
Сообщений: 9,552
Записей в блоге: 1
12.10.2017, 14:49
Цитата Сообщение от android2222 Посмотреть сообщение
меняет название в обоих случаях, получаем
Как вы описали шаблоны - так оно и работает. Кто ж знал, что у вас там вариаций имен дофига. Я об этом не подумал, но я и не должен был.
YuS_2, предложил добавить в конец всех шаблонов проверку на наличие пробельного символа (в том числе, конца строки); как альтернативу еще также можно дописать \b - проверку на конец слова.
PowerShell
1
2
3
4
5
$regex=@{
    "(?<=,)(sa.+?t)?(_|-|\s)?peter(s)?burg\b"="Санкт-Петербург";
    "(?<=,)nizhni(i|j)?(_|-|\s)?novgorod\b"="Нижний Новгород";
    '(?<=,)nizhni(i|j)?(_|-|\s)?tagil\b'="Нижний Тагил";
    }
Таким образом заменяться будут только те слова, в которых шаблон совпадает с концом слова.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
12.10.2017, 14:49
Помогаю со студенческими работами здесь

Замена строк в текстовом файле
Добрый день. Будьте добры, оказать помощь в написании готового bat-файла, который изменит текстовый файл с данными. Нужно: 1)...

Замена символов в текстовом файле
Добрый день , есть батник в котором пробелы меняются на , Необходимо чтобы пробелы менялись на | (но если ставлю | выполнения...

Замена строки в текстовом файле
Помогите пожалуйста Необходимо написать батник. Находит текст в файле 1.txt. Он может меняться, начало не меняется adress= &quot;далее...

Замена символов в текстовом файле
Добрый день у меня такой вопрос. Есть файл test.txt предположим в нем такое содержание:&quot;1;4;5;7;9;1;4&quot;. Нужен код который...

Замена в текстовом файле строк по маске
подскажите, можно ли как то замену по маске делать в txt ? например надо найти &lt;sup&gt;&lt;a name=r3&gt;&lt;a href=&quot;#n_3&quot;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru