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

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

08.10.2017, 17:11. Показов 6430. Ответов 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
7406 / 2256 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
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
7406 / 2256 / 360
Регистрация: 10.03.2016
Сообщений: 5,216
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
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru