Search & Replace

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Savol
Начинающий
Начинающий
 
Сообщения: 10
Зарегистрирован: 10.04.2003 (Чт) 20:34
Откуда: Russia, S-Pb

Search & Replace

Сообщение Savol » 23.05.2004 (Вс) 23:55

Есть два текстовых поля. В одном(допустим, Text1) юзверь пишет, второе(допустим, Text2) невидимое.
Когда у Text1 возникает событие Change, содержимое поля копируется в Text2, после чего в нем(Text2) заменяются некоторые символы.
Код: Выделить всё
[b]'Нужно было находить некоторые значения(их много) и заменять другими.
'Я не знал, как это сделать. И пошел напролом =)[/b]
Dim zz, reA, reB
'Если использовать просто For-Next, то цикл прогонялся один раз и заменялся только один символ.
'Тогда сделал так: в For-Next указал количество замен - zz(т.е. сколько раз прогоняется цикл), внутри которого ...
For zz = 1 To 2 Step 1:
'я вставил цикл Select-Case, где каждой заменяемой фразе - reA соответствовала заменяющая - reB
Select Case zz
Case 1
    reA = "x"
    reB = "<x>"
Case 2
    reA = "y"
    reB = "<y>"
End Select
'Получилось ну очень дуболомно...
'Таким образом, цикл For-Next прогонялся столько раз, сколько мне нужно произвести замен в тексте,
'при этом каждый раз перебирались значения переменной zz и соответсвующий текст заменялся...
Text2.SelStart = Text2.SelStart + 2
If InStr(Text2.SelStart, Text2.Text, reA) <> 0 Then
Text2.SelStart = InStr(Text2.SelStart, Text2.Text, reA) - 1
Text2.SelLength = Len(reA)
If Len(Text2.SelText) > 0 Then Text2.SelText = reB
End If

Next zz
'Собственно, весь алгоритм.
'Как оптимизировать, ума не приложу =)
Text1.text=Text2.text
'Затем измененный текст возвращается в Text1.


При этом возникает два вопроса:

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

2) Как реализовать замену по маске "mask1"TEXT"mask2".
Т.е. заменить mask1 и mask2, не трогая TEXT. В теории-то понятно, но на практике - когда слишком много переменных нужно заменить - возникает путанница.

Дабы не быть голословным - перевод кода ссылки из формата форумов(phpBB, YaBB) в обычный HTML
Вот, что есть:

Код: Выделить всё
Private Sub URL_BUTTON_Change()
'Пользователь кликает на кнопочку
addr_url=InputBox("Address URL:", "http://")
'Вылетает окошко для ввода
addr_label=InputBox("Address title:", "Link")
'Вылетает еще одно окошко для ввода
Text1.Text = Text1.Text + "[url=" + addr_url + "]" + addr_label + "[/url]"
'Засовываем в текстбокс полученное...


Получится
Код: Выделить всё
[url=addr_url]addr_label[/url]
.
Это нужно привести к виду <a href=addr_url>addr_label</a>
И как это сделать?
Можно, конечно, объявить переменные addr_label и addr_url как Public, но где гарантия, что пользователь не кликнет на эту кнопку еще раз? Или нужно создавать массив, куда записывать все эти переменные(а он разрастется до гигантских размеров)?

Подскажите...

PS: Прошу прощения, если все это уже было(наверняка было).
Просто хочется во всем детально разобраться, а без советов тут - никак.

Oxygen
Белая и пушистая
Белая и пушистая
Аватара пользователя
 
Сообщения: 1314
Зарегистрирован: 15.07.2003 (Вт) 7:14
Откуда: Москва

Сообщение Oxygen » 24.05.2004 (Пн) 6:30

Поиск можно немного оптимизировать с помощью функции instr, а там уже менять достаточно просто, если знаешь с какого символа начинается последовательность. Что бы не прогонять весь массив, то можно использовать цикл Do Loop Until. И ловить, когда instr возвратит 0.
Процедура клонирования завершена.
Коррекция имплантированного сознания соответствует принятым алгоритмам.
Уникальный идентификатор скопирован в чип временного паспорта.
Активация прав гражданина ожидается в течение 24 часов


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 7

    TopList