|
|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Vladimir Lomov 2:5020/400 13 Mar 2007 13:24:20 To : Serge Chervjakov Subject : Re: Поиск и замена с русскими буквами -------------------------------------------------------------------------------- Serge Chervjakov пишет: VL>> Hапример, (допустим, что это текст из библиотеки VL>> Машкова): VL>> Ветер мглою небо кроет ... VL>> Пять пробелов начинают абзац (что с ним делать, VL>> это другая проблема, я о ней не упоминал :-)), SC> Hу через \b уже решили.. но если все таки будут проблемы с определением, что SC> вот эта последовательность - это слово, то можно опять таки уйти от привязки к SC> словам. SC> Сделать только надо будет 2 регулярных выражения - первое переделает все SC> пробелы на 1 пробел, а второе - заменит одинокостоящий пробел в начале строки SC> на 5 пробелов:) Естественно. То что я спрасил это не вся задача, а лишь её часть. Именно: сначала находится начало абзаца (это, хвала ..., задача не сложная, пять, или др. количество пробелов в начале строки), вставляем перед абзацем пустую строку (как в LaTeX'е); далее идёт поиск на повторяющиеся пробелы. Со второй частью и были проблемы. Конечно, переделать текст не самоцель. Мне нужен более или менее готовый текст чтобы "скормить" openoffice'у и LaTeX'у. Зачем это нужно спросите: да в учебных целях. Hедавно столкнулся с тем, что народ тычет в себя пальцем и говорит, что может (например, сделать реферат на тему "Рост числа завалявшихся смешариков", скачивает с нета; приносит, ну вот, мол, сделал, примите, ему говоришь, с правилами оформления знаком ... и начинается), а результат плачевный. Взял с библиотеки Мошкова пару книг и теперь буду "объяснять" как положено оформлять, с особенности при помощи "современных средств, а именно текстовых редакторов" (в кавычках, т.е., имхо, полный бред, редактор должен редактировать, а не форматировать текст; фраза не моя). Затем покажу, как это можно сделать в LaTeX'е. Кому что удобнее, тем и будет пользоваться. Пробелма возникла когда взял наобум хороший текст ("Сами боги", Айзек Азимов). Куча лищних пробелов и пр. "мелочи". Решил немного упростить задачу, да и perl подучить. Что получилось --- известно. Да, вот ещё одна проблема. Все преобразования делаются в цикле: foreach(<IN_FH>) { s/(^\ {$paragraph_indent_num})/\n$1/go; s/([-\.,!\?'";:>]|\b)\s+([-\.,!\?'";:<]|\b|\n)/$1 $2/g; print OUT_FH $_; $line++; } Hа выходе файл в том формате, что нужно. Hо если использовать немного другой цикл foreach(<IN_FH>) { s/(^\ {$paragraph_indent_num}.*)\n/\n$1 /go; s/(^\w.*)\n/ $1 /; s/([-\.,!\?'";:>]|\b)\s+([-\.,!\?'";:<]|\b|\n)/$1 $2/g; print OUT_FH $_; $line++; } чтобы весь абзац располагался в одной строке (для openoffice'а), то не все лишние пробелы убираются и не всегда срабатывает второй s. Какие-нибудь идеи, предложения? - --- Best regards, Vladimir Lomov -- Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru --- ifmail v.2.15dev5.3 * Origin: Talk.ru (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/6488b8f50edd.html, оценка из 5, голосов 10
|