Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2009, 10:54   #1
НеВа6464
Пользователь
 
Регистрация: 16.05.2009
Сообщений: 64
По умолчанию Преобразование .txt

Здравствуйте!
Имеются простые (ASCII) текстовые файлы в формате .txt. При открытии этих файлов в Word мы видим, что каждая строка представляет из себя абзац, а реальные абзацы выделяются либо пустыми строками, либо серией пробелов, имитирующих абзацный отступ.
Очень хочется получить нормальные вордовские абзацы.
В ручную проблема решается просто, путем замены в выделенном фрагменте (реальном абзаце) символов конца абзаца на символ пробела. Но в ручную перелопачивать страниц 200-300, тем более несколько текстов очень неохота.
Как это сделать с помощью VBA?
Вероятно такая задача уже давно и многократно решена. Прошу помощи.
Спасибо.
Вложения
Тип файла: txt прим.txt (1.1 Кб, 125 просмотров)
Тип файла: txt прим2.txt (742 байт, 123 просмотров)
НеВа6464 вне форума Ответить с цитированием
Старый 12.09.2009, 13:05   #2
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

http://artefact.lib.ru/design/text_macros_intro.shtml
и далее по ссылкам
Aent вне форума Ответить с цитированием
Старый 12.09.2009, 13:32   #3
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию Все просто.

Макрос для первого файла
Код:
Sub Прим()
  With ActiveDocument.Range.Find
    'Заменяем все абзацы на кодовую последовательность. Она может быть любой
    .Text = "^p"
    .Replacement.Text = "#####"
    .Execute Replace:=wdReplaceAll
    
    'Двойную кодовую последовательность заменяем на знак абзаца
    .Text = "##########"
    .Replacement.Text = "^p"
    .Execute Replace:=wdReplaceAll
    
    'Кодовую последовательность заменяем на пробел
    .Text = "#####"
    .Replacement.Text = " "
    .Execute Replace:=wdReplaceAll
  End With
End Sub
Макрос для второго файла:
Код:
Sub Прим2()
  With ActiveDocument.Range.Find
    'Заменяем все абзацы на пробелы
    .Text = "^p"
    .Replacement.Text = " "
    .Execute Replace:=wdReplaceAll
    
    'Четыре пробела подряд заменяем на знак абзаца
    .Text = "    "
    .Replacement.Text = "^p"
    .Execute Replace:=wdReplaceAll
  End With
End Sub
А со ссылкой, которую дал Aent, советую очень внимательно ознакомиться. Вообще, на артефакте много полезного и интересного есть.
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 12.09.2009, 14:07   #4
НеВа6464
Пользователь
 
Регистрация: 16.05.2009
Сообщений: 64
По умолчанию

Всем спасибо.
Ссылку от Aent кинул в избранное. Полезная штука, но там как раз нет обработки первого случая.
НеВа6464 вне форума Ответить с цитированием
Старый 13.09.2009, 13:54   #5
garik64
Форумчанин
 
Регистрация: 09.07.2009
Сообщений: 111
По умолчанию

Цитата:
Сообщение от viter.alex Посмотреть сообщение
Макрос для первого файла
Можно ведь и сразу для обоих файлов:

Код:
Sub ПримAV()
  With ActiveDocument.Range.Find
    'Меняем настоящие абзацы на кодовую последовательность
    .Text = "[(^13^13)][(^13^32)]"
    .Replacement.Text = "@@@"
    .MatchWildcards = True
    .Execute Replace:=wdReplaceAll
    
    'Меняем ненастоящие на пробел
    .Text = "^13"
    .Replacement.Text = " "
    .Execute Replace:=wdReplaceAll
    
    'Кодовую последовательность - на настоящие абзацы
    .Text = "@@@"
    .Replacement.Text = "^13^13"
    .MatchWildcards = False
    .Execute Replace:=wdReplaceAll
    
    'Убиваем лишние пробелы в начале строк
    .Text = "^13(^32)@"
    .Replacement.Text = "^13"
    .MatchWildcards = True
    .Execute Replace:=wdReplaceAll

    'Для очистки совести убиваем лишние пустые строки
    .Text = "(^13)@"
    .Replacement.Text = "^13^13"
    .MatchWildcards = True
    .Execute Replace:=wdReplaceAll

    'Заодно уж двойные дефисы меняем на короткое тире
    .Text = "--"
    .Replacement.Text = "^="
    .Execute Replace:=wdReplaceAll

    'Тут можно много чего назаменять, но на сегодня хватит :)
  End With
End Sub
Для этого варианта неважно, со скольки пробелов начинается абзац - а он бывает и с двух пробелов, и с восьми.
garik64 вне форума Ответить с цитированием
Старый 14.09.2009, 12:35   #6
НеВа6464
Пользователь
 
Регистрация: 16.05.2009
Сообщений: 64
По умолчанию Спасибо garik64

Так действительно удобнее. Я и сам уже объединил варианты, но более коряво.
НеВа6464 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразование запроса Santosh Microsoft Office Access 2 30.08.2009 22:20
Преобразование даты John34 Microsoft Office Excel 4 24.06.2009 15:48
Преобразование чисел artemavd Общие вопросы Delphi 15 30.07.2008 15:48
Преобразование... prizrak1390 Общие вопросы Delphi 2 02.04.2008 11:24
Как прочесть txt файл www.site.ru/info.txt BR17UY Работа с сетью в Delphi 1 16.04.2007 13:01