Статьи из блога

Избавление от принудительных разрывов: совет читателя

Евгений Артамонов прислал совет по борьбе с принудительными разрывами строк в текстовых документах. Ранее на сайте были опубликованы две заметки по этой теме:

Как удалить принудительный разрыв строки в Word

Принудительное разбиение строки с помощью макроса

 

 

Совет от Евгения Артамонова

Поделюсь своим опытом работы с разрывами в текстовых документах.

В виду специфики работы приходится очень часто использовать вставку текста из окна браузера (а там или текстовый формат, или насильно приведенный к

текстовому).

В первом случае в конце каждой строки стоят разрывы и подходит описанный выше метод (А.К.: речь идет о методе из первой заметке по ссылке), но только начинаю я работу с того, что заменяю все знаки абзацев (^p) на какой-нибудь экстравагантный символ (обычно хватает знака табуляции, но бывали случаи замены на набор из 5 знаков вопросов ;).

 

После этого по описанной методике заменяю:

1) все тире+разрывы строк (-^l) на пустоту (в редких случаях ломаются слова с дефисом - потом автопроверка - на документ в 50 листов - 20-30 случаев);

2) все разрывы строк (^l) на пробелы;

3) все двойные пробелы на одинарные (повторять до тех пор, пока не будет 0 найденных элементов);

4) внедренный ранее символ вместо абзаца заменяю на абзац.

 

Второй вариант предполагает проход по тексту того же PHP и порчей его до неудобоваримого вида – простым вариантом является простановка не разрыва строки, а конца абзаца. И если текстовый формат в таком случае оставлял шанс найти начало каждого абзаца по отступу из (5-8 пробелов), то в этом случае прямых признаков разделения не найти.

А если нет прямых признаков, тогда используются вторичные:

1) заменить все последующие комбинации символ+абзац (.^p, ;^p, :^p – тут точка, точка с запятой и двоеточие выступают как символ) на символ + табуляция (^t);

2) заменить сдвоенный абзац (^p^p) на табуляцию (^t);

3) заменить все абзацы (^p) на пробел;

4) заменить все табуляции (^t) на абзац (^p);

5) заменить все сдвоенные пробелы на одинарные.

 

Опытным путем было выявлено, что Пункт 1 пропускает или ставит лишние знаки в 5-10 % (зависит от исходного текста и злобности кодировщика для порчи текста). Ещё одно замечание: в случае большого документа (100 и более

страниц) – процесс замены абзацев на пробелы может занять несколько минут (иногда Word не выдерживает и вылетает, так что сохраняемся ...).

 

Где это применялось: 1) при «копировании» книг с полубесплатных источников,

2) при работе с частично раскрытыми частями диссертаций и прочих научных трудов.

twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru rutvit.ru myspace.com technorati.com digg.com friendfeed.com pikabu.ru blogger.com liveinternet.ru livejournal.ru memori.ru google.com bobrdobr.ru mister-wong.ru yahoo.com yandex.ru del.icio.us

Еще записи по вопросам использования Microsoft Word:

Комментариев: 9

  1. 12.08.2011 в 13:17 | #1

    Как корректно написать макpос на ворде, для удаление разрыва страницы перед таблицами так чтобы не объединил этих таблиц

  2. 12.08.2011 в 17:52 | #2

    Целью делать такой макрос пока не задавлся, но постановка задачи интересная - буду пробовать реализовать.

  3. 12.08.2011 в 20:04 | #3

    Евгений, очень интересно!

  4. 13.08.2011 в 00:16 | #4

    приступив к работе осознал некоторую некорректность или недопонимание.

    В Word-е при разрыве страницы, даже если этот разрыв делается внутри таблицы, перед таблицей на новой странице принудительно добавляется символ абзаца. Так что простое удаление разрывов страниц (^m) приведёт к необходимому результату.

    Вот макрос писаный на автомате:

    Sub Макрос1()

    '

    ' Макрос1 Макрос

    ' Макрос записан 12.08.2011 EArt

    '

    Selection.Find.ClearFormatting

    Selection.Find.Replacement.ClearFormatting

    With Selection.Find

    .Text = "^m"

    .Replacement.Text = ""

    .Forward = True

    .Wrap = wdFindContinue

    .Format = False

    .MatchCase = False

    .MatchWholeWord = False

    .MatchWildcards = False

    .MatchSoundsLike = False

    .MatchAllWordForms = False

    End With

    Selection.Find.Execute Replace:=wdReplaceAll

    End Sub

  5. 22.08.2011 в 12:23 | #5

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

  6. 22.08.2011 в 12:45 | #6

    Спасибо огромноеsmile!!! Раньше вручную корректировала, а теперь все делается автоматически smile)))))))

  7. 23.08.2011 в 01:51 | #7

    мммм ... всегда пожалуйста ... за аккуратность макроса благодарить необходимо ребят из MS за их инструмент записи макросов ... этот макрос занял у меня 15 секунд, на его оптимизацию может потребоваться ещё час (проверка исключений, лишних операторов и т.п), но если работает и заказчик рад, то не вижу смысла переделывать ;)

    что касается пожелания про отслеживание первых строк (шапки) таблицы так и не понял - в чём суть задания ... ;)

  8. ВЯпчс
    18.06.2012 в 15:26 | #8

    ну как убрать раэрыв раэдела ? это возможно?!

  9. Янея
    18.05.2014 в 19:58 | #9

    Тут у Вас такие древние даты........Может кто-то откликнется?..

    У меня срочный вопрос- как удалить пробелы между буквами в словах? и как выделить все слова которые так написаны? Поясняю- стоит шрифт Calibri Body, а в тексте два разных шрифта и на просьбу выделить все слова с одинаковым форматированием выделяет весь текст. Если поменять шрифт на другой эффект различия пропадает, а слова видимые в калибри другим шрифтом остаются с пробелами между БУКВАМИ.

    Прошу прощения если не в тему

Оставьте комментарий!

(обязательно)

^ Наверх