Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/48: Рейтинг темы: голосов - 48, средняя оценка - 4.69
86 / 2 / 1
Регистрация: 04.03.2012
Сообщений: 8
1

Как удалить из текста переносы, расставленные вручную

12.12.2012, 23:02. Показов 8978. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задание вообще такое:

Составить программу удаления из текста переносов, расставленных вручную. Программа должна работать в двух режимах:
1 - автоматическое удаление переносов. При этом обнаруженные дефисы между словами сразу удаляются;
2 - запрос на удаление переноса. При обнаружении в тексте слова, разделенного дефисом на части, на экран выводится диалоговое окно с найденным словом. При этом пользователь выбирает одно из трех действий - удалить перенос, оставить перенос или завершить выполнение макрокоманды.

1 я сделала. сделала форму вида
слово,удалить. найти далее. удалить все.

вопрос для 2 части.

вот процедура для удаления всех:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
 Private Sub delallButton_Click() 
 Selection.Find.ClearFormatting 
 Selection.Find.Replacement.ClearFormatting 
 With Selection.Find 
 .Text = Chr(31) 
 .Replacement.Text = "" 
 .Forward = True 
 .Wrap = wdFindContinue 
 End With 
 Selection.Find.Execute Replace:=wdReplaceAll 
 End Sub
как мне вывести само слово? было предположение, что можно найти дефис и записать в 2 строки часть слова до и после. Но как определить позицию курсора? или это можно как-то по-другому сделать?(с vba мало знакома- 2 лабы по нему всего, поэтому такие вот вопросы)

пробовала так же через Expand, но вся беда в том, что я не знаю синтаксис его и куда его вставлять. Как присвоить его элементу формы label?(чтобы вывести на форме).

Может, у кого что-то похожее есть....
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.12.2012, 23:02
Ответы с готовыми решениями:

Как удалить из текста пустые строки и переносы?
Имеется текст Строка1

Как удалить переносы из переменной?
Текстовый файл читается построчно. Исходя из содержания строки, часть строки заносится в переменную...

Как сделать такие переносы текста
Приветствую всех, я тут новенький, не обижайте если что )) Вопрос такой, мне нужно взять...

Удалить части строки, заключенные в правильно расставленные фигурные скобки
Помогите пожалуйста с задачкой. Задание:Задана строка. Нужно удалить ее части, заключенные в...

9
5562 / 1368 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
13.12.2012, 03:54 2
Теперь есть.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
Sub ThreeWAYS()
Dim r As Object  'указатель для слов
Dim j As Byte    'счётчик для мягких переносов в одном слове
 
Selection.HomeKey unit:=wdStory 'становимся в начало текста
    With Selection.Find
    .Text = Chr(31)             'ищем мягкие переносы
    .Wrap = wdFindStop
    .Execute
        Do                      'пока поиск находит .Text
                Set r = Selection.Words.Last
            Do              'пока мы (курсор) на анализируемом слове
                t = Replace(Selection.Words.Last.Text, Chr(31), "")
                j = j + 1 'номер символа переноса
                    Select Case _
                     MsgBox("Удалить " & j & "-й перенос " & _
                    "в слове «" & t & "»?", vbYesNoCancel)
                        Case Is = vbYes:    Selection.Delete
                        Case Is = vbNo
                        Case Is = vbCancel: Exit Sub
                    End Select
                                    .Execute 'выделение следующего
            Loop Until Replace(Selection.Words.Last.Text, Chr(31), "") <> t
                j = 0
        Loop Until Not .Found
    End With
End Sub
Некорректно работает, когда есть одинаковые слова-соседи, например Баден-Баден (Ба¬ден-Ба¬ден), а так:
Миниатюры
Как удалить из текста переносы, расставленные вручную  
1
5562 / 1368 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
13.12.2012, 04:03 3
Назначил программу клавише F8:
Вложения
Тип файла: doc HiphenSoft.doc (40.0 Кб, 44 просмотров)
0
5562 / 1368 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
13.12.2012, 04:11 4
И также с последним в тексте символом Chr(31) плохо обходится.

Не по теме:

За 1,5 ч так и не отладил, но схема, надеюсь, ясна.

0
86 / 2 / 1
Регистрация: 04.03.2012
Сообщений: 8
13.12.2012, 20:05  [ТС] 5
Лучший ответ Сообщение было отмечено как решение

Решение

Sasha_Smirnov, спасибо большое за то, что откликнулись. не совсем то, что мне надо, но я уже сама сделала- в час ночи меня вдруг попёрло))))))
надо было удалять переносы, которые реально были расставлены через "Разметка страницы- расстановка переносов- ручная". Позже постараюсь выложить документ.
1
5562 / 1368 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
13.12.2012, 20:14 6
Через что переносы расставлены — Word не помнит. Chr(31) он и в Африке Chr(31).
Цитата Сообщение от асоишница Посмотреть сообщение
Позже постараюсь выложить документ.
Ближе к полуночи?.. Меня вот тоже среди ночи озаряет!
0
86 / 2 / 1
Регистрация: 04.03.2012
Сообщений: 8
13.12.2012, 20:21  [ТС] 7
Sasha_Smirnov, да я вообще днём не умею работать. все самые умные мысли всегда приходят в голову после 12)))))весь день могу просидеть, а в итоге ночью за час всё быстренько сделаю)))))
0
demon5305
15.12.2012, 01:46 8
асоишница, выложи пожалуйста код или документ, у нас задания совпали ... буду очень признателен)))
5562 / 1368 / 150
Регистрация: 08.02.2009
Сообщений: 4,109
Записей в блоге: 30
15.12.2012, 02:30 9
demon5305, вот отлаженный
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Sub ThreeRoads()
Dim r As Range  'указатель для обрабатываемого слова
 
Selection.HomeKey unit:=wdStory 'становимся в начало текста
    With Selection.Find
    .Text = Chr(31)             'ищем мягкие переносы
    .Wrap = wdFindStop
    .Execute
    If Not .Found Then MsgBox "Основной текст " & ActiveDocument & _
    " от мягких переносов [символов Chr(31)] очищен.": Exit Sub
        Do                      'пока поиск находит .Text
                Set r = Selection.Words.Last
            Do              'пока мы (курсор) на анализируемом слове
                t = Replace(Selection.Words.Last.Text, Chr(31), "")
                    Select Case _
                     MsgBox("Удалить мягкий перенос " & _
                    "в слове «" & Trim(t) & "»?", vbYesNoCancel)
                        Case Is = vbYes:    Selection.Delete
                        Case Is = vbNo      'едем далее по тексту
                        Case Is = vbCancel: Exit Sub
                    End Select
                                    .Execute 'выделение следующего
            Loop Until Not .Found
        Loop Until Not .Found
    End With
End Sub
Цитата Сообщение от асоишница Посмотреть сообщение
При обнаружении в тексте слова, разделенного дефисом на части, на экран выводится диалоговое окно с найденным словом. При этом пользователь выбирает одно из трех действий - удалить перенос, оставить перенос или завершить выполнение макрокоманды.
Перепутаны понятия: дефисы — элементы слов, а знаки переноса — места, куда Word ставит упомянутый символ Chr(31)* при расстановке переносов. Этот символ виден лишь при отображении "невидимых символов", и как раз с ним мой код и работает (аналогично режиму 1).
_____________________
* да, на переносе слов он такой же, как дефис, но вообще в тексте не виден (вводится вручную через Alt-031)
0
86 / 2 / 1
Регистрация: 04.03.2012
Сообщений: 8
15.12.2012, 17:12  [ТС] 10
После сдачи лабы увидела такую вот книжку с выполненным моим заданием в качестве примера. Но я не проверяла.

С.А.Малышев-Самоучитель VBA.Как это делается в Word, Excel, Access -2001

Ищите её архивом(в нём вложены документы с макросами)

demon5305, своё пока нет возможности скинуть.
1
15.12.2012, 17:12
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.12.2012, 17:12
Помогаю со студенческими работами здесь

Как удалить лишние пробелы, переносы и экранировать символы в строке?
на вход приходит строка. нужно в любой приходящей строке удалять переносы на следующую строку,...

DataGridView как удалить строку вручную?
Добрый день. Недавно в C#. Подскажите, пожалуйста, чего-то не могу сообразить. Есть на форме...

Как удалить ICS (Общий доступ к подключению к Интернету) вручную?
Ребят очень прошу помогите, может кто сталкивался с такой проблемой: 1. Установил RALINK wireless...

Удалить переносы строк в файле
Нужен код программы который будет считывать с файла стихотворение( 2 четверостишья) вот пример ...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru