Форум программистов, компьютерный форум, киберфорум
Batch (CMD/BAT)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
268 / 126 / 6
Регистрация: 20.10.2013
Сообщений: 196

Замены в тексте (наподобие XML)

29.04.2014, 23:48. Показов 932. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Мне нужен bat-файл, который делает следующее: берёт файл input.txt с текстом из русских, английских букв, цифр, а также всяческих спецсимволов и пробельных символов, и создаёт файл output.txt, который почти что совпадает с файлом input.txt с точностью до следующих замен

а) Заменить \subsection*{Пункт X} на <div id="p_itemname">Пункт X</div>; X — буква английского или русского алфавита.
б) Заменить \textbf{Решение:} на <div id="p_solutionanme">Решение:</div>
в) Заменить \textbf{Задача:} на <div id="p_taskname">Задача:</div>
г) Удалить всё, начиная с начала файла и до слова "\document{begin}" включительно
д) Удалить последнее слово (которое гаранитровано "\document{end}") в файле
е) Заменить \section*{Y} на <div id="p_problemname">Y</div> Y — строка состоящая из русских букв и пробелов

для г и д я использовал следующие (довольно неизящные) конструкции:
string — очередная строка из файла
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
echo %string% > tmp.txt
find "\use" < tmp.txt && exit /b
del /F /Q tmp.txt 
 
echo %string% > tmp.txt
find "\documentclass" < tmp.txt && exit /b
del /F /Q tmp.txt 
 
echo %string% > tmp.txt
find "\begin{document}" < tmp.txt && exit /b
del /F /Q tmp.txt 
 
echo %string% > tmp.txt
find "\end{document}" < tmp.txt && exit 
del /F /Q tmp.txt
Это как-то совсем колхозно смотрится (: есть ли решение получше?

для б и в пытаюсь использовать что-то типа:
Bash
1
set %string=%string:^\textbf{Задача:}=^<div id="p_taskname"^>Задача:^</div^>%
однако это не работает. Видимо символы не экранируются спецификатором «^».
с е и а идей нет вообще кроме того, что можно как-то попытаться использовать findstr. Прошу помочь хоть чем-нибудь: полностью код столь большого скрипта, понятно, вряд ли кто-то напишет, но хотя бы объяснить основные идеи уже было бы неплохо. Буду благодарен.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
29.04.2014, 23:48
Ответы с готовыми решениями:

позиция замены в тексте
что нужно добавить в код чтобы замена происходила из заданного мной места введенного в Edit procedure TForm1.Button1Click(Sender: TObject);...

Файлы в delphi. Выполнить замены слов в тексте
Дан текст в этом тексте нужно заменить слова Коля на Лена, он на она, Рекс на Шарик! Программа должно работать по такой схеме: 1)...

Составить программу для замены в тексте пробелов на 0
Составить программу для замены в тексте пробелов на 0

7
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
30.04.2014, 00:15
Urnwestek, здравствуйте !

Цитата Сообщение от Urnwestek Посмотреть сообщение
а также всяческих спецсимволов
Тогда Вам лучше писать на VBScript/JScript.
На BAT попробовать можно, но гарантировать корректную работу это вряд ли.
1
268 / 126 / 6
Регистрация: 20.10.2013
Сообщений: 196
30.04.2014, 00:21  [ТС]
Dragokas, да, спасибо, почитаю где-нибудь об этом.
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
30.04.2014, 00:28
Цитата Сообщение от Urnwestek Посмотреть сообщение
\subsection*{Пункт X}
Звездочка здесь - это что?

Добавлено через 1 минуту
Какой-нибудь бы пример исходного файла.
0
268 / 126 / 6
Регистрация: 20.10.2013
Сообщений: 196
30.04.2014, 00:34  [ТС]
http://rghost.ru/54738765
Звёздочка — это просто символ звёздочки (:
Я действительно теперь понял, что неправильно выбрал инструмент. С батниками незнаком был и думал, что такие задачи там выполняются в несколько строчек и, собственно, для того и предназначен. Однако теперь понимаю, что это не так и мне в разы проще будет написать такое на тех же плюсах, но всё же спасибо за внимание. (:
0
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18033 / 7736 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
30.04.2014, 00:40
Urnwestek, отчасти Вы были правы.
Батники позволяют делать некоторые простейшие замены текста.
Там, где разговор заходит о спецсимволах (кавычки и пр.) лучше использовать другой инструмент.
На батниках сделать реально. Но мой Вам совет - не нужно.

На VBS + регулярные выражения мне написать нетрудно, если нужно.
0
268 / 126 / 6
Регистрация: 20.10.2013
Сообщений: 196
30.04.2014, 00:51  [ТС]
Dragokas, спасибо вам! Но я всё же хочу сделать сам хотя бы по той причине, что в будущем, возможно, формат будет претерпевать изменения и, следовательно, программу тоже надо будет править, а свой код-то читать приятнее. (: Но действительно спасибо за то, что предложили помощь.
0
 Аватар для ComSpec
3463 / 2001 / 635
Регистрация: 26.02.2014
Сообщений: 1,457
30.04.2014, 19:54
Вот так, похоже, все поставленные задачи решаются, хотя "подводные камни" не исключены:

Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@echo off
setlocal enabledelayedexpansion
for /f "delims=:" %%i in ('findstr /bn \\begin{document} "input.txt"') do set n=%%i
(
for /f "delims=" %%i in ('^<"input.txt" more +%n%') do (
 set "string=%%i"
 set "string=!string:        =  !"
 set "string=!string:\textbf{Решение:}=<div id="p_solutionanme">Решение:</div>!"
 set "string=!string:\textbf{Задача:}=<div id="p_taskname">Задача:</div>!"
 set "$string=!string:\section*{=<div id="p_problemname">!"
 set "$string=!$string:\subsection*{Пункт =<div id="p_itemname">Пункт !"
 if not "!string!"=="!$string!" set "string=!$string:}=</div>!"
 if not "!string!"=="\end{document}" echo.!string!
)
)>"output.txt"
endlocal
exit /b
.

В седьмой строке после двоеточия идут восемь пробелов, а после знака равенства находится символ табуляции.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.04.2014, 19:54
Помогаю со студенческими работами здесь

Файлы в Pascal. Выполнить замены слов в тексте.
Дан текст в этом тексте нужно заменить слова Коля на Лена, он на она, Рекс на Шарик! Программа должно работать по такой схеме: 1)...

Символы Составить программу для замены в данном тексте
Старое слово на новое слово. Слова отделяются друг от друга пробелами. Например t='МУХА МУХА ЦОКОТУХА МУХА ПО ПОЛЮ ПОШЛА МУХА ДЕНЕЖКУ...

В тексте использован шифр простой замены. Просьба расшифровать и объяснить, если есть возможность
В тексте использован шифр простой замены. Просьба расшифровать и объяснить, если есть возможность. и хсёжг нугфрсз уцнсесжфхес...

Напишите программу замены в тексте всех букв «а» на «о» и наоборот с учетом регистра. Выведите исходные и преобразованный тексты.
Напишите программу замены в тексте всех букв «а» на «о» и наоборот с учетом регистра. Выведите исходные и преобразованный тексты.

Составить программу для замены в тексте слога "ма" на слог "па" / QBasic (Бейсик)
Помогите пожалуйста!!!! Составить программу для замены в тексте слога &quot;ма&quot; на слог &quot;па&quot;


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru