Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Replace

2.1K
02 февраля 2003 года
alexsid
18 / / 31.01.2003
Задача заменить все искомые слова в некоторой строке на них же самих, плюс тэг "" слева и "" справа, без учета регистра.

То есть:
Строка: "hello Hello hell5o HellO"
Искомое слово: "hello"

После соотв. преобразований необходимо получить: "hello Hello hell5o HellO".

Пытался использовать команду Replace с ключом vbTextCompare, но получается не совсем то что нужно. Найденное слово (без учета регистра) заменяется на непосредственно искомое. То есть для вышеприведенного примера, результат получается следующий: "hello hello hell5o hello".

Как добиться поставленной задачи?
267
03 февраля 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by alexsid
Задача заменить все искомые слова в некоторой строке на них же самих, плюс тэг "" слева и "" справа, без учета регистра.

То есть:
Строка: "hello Hello hell5o HellO"
Искомое слово: "hello"

После соотв. преобразований необходимо получить: "hello Hello hell5o HellO".

Пытался использовать команду Replace с ключом vbTextCompare, но получается не совсем то что нужно. Найденное слово (без учета регистра) заменяется на непосредственно искомое. То есть для вышеприведенного примера, результат получается следующий: "hello hello hell5o hello".

Как добиться поставленной задачи?



Только циклом.
Делаешь Instr(Pos, TvoyaStroka, "hello", VBTextCompare)
А дальше Left и Mid.

2.1K
03 февраля 2003 года
alexsid
18 / / 31.01.2003
Цитата:
Originally posted by Cutty Sark

Только циклом.
Делаешь Instr(Pos, TvoyaStroka, "hello", VBTextCompare)
А дальше Left и Mid.


Спасибо. Жаль, что нет стандартной процедуры.

А нет в VB чего-небудь похожего на Регулярные Выражения? Насколько я понял, Replace не поддерживает таковых.

Например, я хочу удалить из строки все слова, длина которых меньше чем 3 символа. Как быть?

267
04 февраля 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by alexsid

Спасибо. Жаль, что нет стандартной процедуры.

А нет в VB чего-небудь похожего на Регулярные Выражения? Насколько я понял, Replace не поддерживает таковых.

Например, я хочу удалить из строки все слова, длина которых меньше чем 3 символа. Как быть?



Ну в принципе так же Instr-ами делается.

2.1K
05 февраля 2003 года
alexsid
18 / / 31.01.2003
Цитата:
Originally posted by Cutty Sark
Ну в принципе так же Instr-ами делается.



А вот как, если не секрет? Бежать по строке циклом и смотреть, является ли текущее слово - словом длины два?.. Не красиво как-то!

267
05 февраля 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by alexsid


А вот как, если не секрет? Бежать по строке циклом и смотреть, является ли текущее слово - словом длины два?.. Не красиво как-то!



А чего некрасивого? Все равно тебе один раз по строке придется пройтись.
Если хочешь пример, скажи, у тебя строка со знаками препинания или только с пробелами.

2.1K
05 февраля 2003 года
alexsid
18 / / 31.01.2003
Цитата:
Originally posted by Cutty Sark
А чего некрасивого? Все равно тебе один раз по строке придется пройтись.
Если хочешь пример, скажи, у тебя строка со знаками препинания или только с пробелами.

Все символы, кроме пробела, букв и цифр я предварительно убиваю. Так что, только пробелы. Причем, по одному между словами!

267
05 февраля 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by alexsid
Все символы, кроме пробела, букв и цифр я предварительно убиваю. Так что, только пробелы. Причем, по одному между словами!



Код:
Option Explicit

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


Но тебе лучше было бы удалять короткие слова в том цикле, в котором ты выкидываешь из строки всякие левые символы. Незачем по два раза по одной и тойже строке таскаться!
2.1K
06 февраля 2003 года
alexsid
18 / / 31.01.2003
Цитата:
Originally posted by Cutty Sark
Но тебе лучше было бы удалять короткие слова в том цикле, в котором ты выкидываешь из строки всякие левые символы. Незачем по два раза по одной и тойже строке таскаться!



Ага, спасибо. Действительно довольно просто.

Я вот чему поражаюсь: на VB стал программировать недавно, до этого последнее время на Perl'e скрипты ваял. Насколько же VB недоработан в области обработки строк!!! Нельзя написать "$string =~ s/\b\w{1,2}\b//g;" для решения данной задачи. Многое приходится писать ручками, нет регулярных выражений... Ужас какой-то.

267
06 февраля 2003 года
Cutty Sark
1.2K / / 17.10.2002
Цитата:
Originally posted by alexsid


Ага, спасибо. Действительно довольно просто.

Я вот чему поражаюсь: на VB стал программировать недавно, до этого последнее время на Perl'e скрипты ваял. Насколько же VB недоработан в области обработки строк!!! Нельзя написать "$string =~ s/\b\w{1,2}\b//g;" для решения данной задачи. Многое приходится писать ручками, нет регулярных выражений... Ужас какой-то.



Сложно сказать. Я на Перл никогда даже в глаза не видел. Так что выражение "=~ s/\b\w{1,2}\b//g;" для меня как китайская грамота.
Но в принципе, если тебе со строками надо постоянно общаться, напиши себе библиотечку и радуйся жизни. Своя библиотека хороша тем, что ты точно знаешь, как она работает, и что ты всегда можешь чего-нибудь подкрутить в ней для своих нужд. У меня вон уже куча процедурок полезных накопилась за годы жизни.

(Из выступления командира перед новобранцами: "Если вы столь тупы, что не можете запомнить приказы командиров, записывайте их в блокнот, как, например, это делаю я.")

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог