Replace
То есть:
Строка: "hello Hello hell5o HellO"
Искомое слово: "hello"
После соотв. преобразований необходимо получить: "hello Hello hell5o HellO".
Пытался использовать команду Replace с ключом vbTextCompare, но получается не совсем то что нужно. Найденное слово (без учета регистра) заменяется на непосредственно искомое. То есть для вышеприведенного примера, результат получается следующий: "hello hello hell5o hello".
Как добиться поставленной задачи?
Задача заменить все искомые слова в некоторой строке на них же самих, плюс тэг "" слева и "" справа, без учета регистра.
То есть:
Строка: "hello Hello hell5o HellO"
Искомое слово: "hello"
После соотв. преобразований необходимо получить: "hello Hello hell5o HellO".
Пытался использовать команду Replace с ключом vbTextCompare, но получается не совсем то что нужно. Найденное слово (без учета регистра) заменяется на непосредственно искомое. То есть для вышеприведенного примера, результат получается следующий: "hello hello hell5o hello".
Как добиться поставленной задачи?
Только циклом.
Делаешь Instr(Pos, TvoyaStroka, "hello", VBTextCompare)
А дальше Left и Mid.
Только циклом.
Делаешь Instr(Pos, TvoyaStroka, "hello", VBTextCompare)
А дальше Left и Mid.
Спасибо. Жаль, что нет стандартной процедуры.
А нет в VB чего-небудь похожего на Регулярные Выражения? Насколько я понял, Replace не поддерживает таковых.
Например, я хочу удалить из строки все слова, длина которых меньше чем 3 символа. Как быть?
Спасибо. Жаль, что нет стандартной процедуры.
А нет в VB чего-небудь похожего на Регулярные Выражения? Насколько я понял, Replace не поддерживает таковых.
Например, я хочу удалить из строки все слова, длина которых меньше чем 3 символа. Как быть?
Ну в принципе так же Instr-ами делается.
Ну в принципе так же Instr-ами делается.
А вот как, если не секрет? Бежать по строке циклом и смотреть, является ли текущее слово - словом длины два?.. Не красиво как-то!
А вот как, если не секрет? Бежать по строке циклом и смотреть, является ли текущее слово - словом длины два?.. Не красиво как-то!
А чего некрасивого? Все равно тебе один раз по строке придется пройтись.
Если хочешь пример, скажи, у тебя строка со знаками препинания или только с пробелами.
А чего некрасивого? Все равно тебе один раз по строке придется пройтись.
Если хочешь пример, скажи, у тебя строка со знаками препинания или только с пробелами.
Все символы, кроме пробела, букв и цифр я предварительно убиваю. Так что, только пробелы. Причем, по одному между словами!
Все символы, кроме пробела, букв и цифр я предварительно убиваю. Так что, только пробелы. Причем, по одному между словами!
Sub Example()
MsgBox DeleteShort("aaaaaa bbb ccccccc d eeeee fffff ggg")
End Sub
Function DeleteShort(x As String) As String
Dim i1 As Integer, i2 As Integer
DeleteShort = ""
i1 = 1
i2 = InStr(i1, x, " ")
While i2 <> 0
If i2 > i1 + 3 Then
DeleteShort = DeleteShort & Mid(x, i1, i2 - i1 + 1)
End If
i1 = i2 + 1
i2 = InStr(i1, x, " ")
Wend
If Len(x) >= i1 + 3 Then
DeleteShort = DeleteShort & Mid(x, i1)
End If
End Function
Но тебе лучше было бы удалять короткие слова в том цикле, в котором ты выкидываешь из строки всякие левые символы. Незачем по два раза по одной и тойже строке таскаться!
Но тебе лучше было бы удалять короткие слова в том цикле, в котором ты выкидываешь из строки всякие левые символы. Незачем по два раза по одной и тойже строке таскаться!
Ага, спасибо. Действительно довольно просто.
Я вот чему поражаюсь: на VB стал программировать недавно, до этого последнее время на Perl'e скрипты ваял. Насколько же VB недоработан в области обработки строк!!! Нельзя написать "$string =~ s/\b\w{1,2}\b//g;" для решения данной задачи. Многое приходится писать ручками, нет регулярных выражений... Ужас какой-то.
Ага, спасибо. Действительно довольно просто.
Я вот чему поражаюсь: на VB стал программировать недавно, до этого последнее время на Perl'e скрипты ваял. Насколько же VB недоработан в области обработки строк!!! Нельзя написать "$string =~ s/\b\w{1,2}\b//g;" для решения данной задачи. Многое приходится писать ручками, нет регулярных выражений... Ужас какой-то.
Сложно сказать. Я на Перл никогда даже в глаза не видел. Так что выражение "=~ s/\b\w{1,2}\b//g;" для меня как китайская грамота.
Но в принципе, если тебе со строками надо постоянно общаться, напиши себе библиотечку и радуйся жизни. Своя библиотека хороша тем, что ты точно знаешь, как она работает, и что ты всегда можешь чего-нибудь подкрутить в ней для своих нужд. У меня вон уже куча процедурок полезных накопилась за годы жизни.
(Из выступления командира перед новобранцами: "Если вы столь тупы, что не можете запомнить приказы командиров, записывайте их в блокнот, как, например, это делаю я.")