На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual Basic: Общие вопросы
Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
4. Используйте теги [ code=vba ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google

Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.
Модераторы: SCINER, B.V.
  
> Поиск и замена в строке
    Есть например некая строковая переменная:12356351236688
    Требуется получить строку:115635116688 т.е.Найти в строке 123 и заменить на 11

    конечно такая задачка решается очень просто при помощи функции MID и &

    а требуется получить более универсальную функцию которая находила бы любую подстроку в строке и меняла на требуемую:

    Начало функции я представляю так:

    ExpandedWrap disabled
      Public Function Find(byVal A1 as string,byVal A2 as string,byVal A3 as string) as string
      'Где A1-искомая строка A2-требуемая подстрока A3-на что заменить
      Find=ответ
      end function


    как более грамотно это организовать?
      Dethlord, есть функция из стандартной библиотеки VB, вот она:
      ExpandedWrap disabled
        Result = Replace("123-555555-123-555", "123", "11")

      P.S. Думаю, ты догадался какие аргументы, к чему относятся... ;)
      Сообщение отредактировано: M.A.R.K -
        СПАСИБО!
          Dethlord не перестает меня удивлять :whistle:
            Цитата Dethlord @
            требуется получить более универсальную функцию которая находила бы любую подстроку в строке и меняла на требуемую

            Гм... следует ли результат выполнения Result = Replace("1212121", "121", "11") считать верным?
              все зависит от обновления Expression в ходе выполнения Replase, если бы обновлялось было бы 1111, имхо.
              Сообщение отредактировано: GRAFF -
                Цитата GRAFF @
                все зависит от обновления Expression в ходе выполнения Replaсe

                Нет никакого обновления. Логика работы Replace везде абсолютно такая:
                ExpandedWrap disabled
                  Replace(str,from,to) == Join(Split(str, from),to)

                Соответственно Replace("1212121", "121", "11") даёт "11211".
                Однако не исключено, что в каком-то случае логика требует замены каждого вхождения, включая наложенные, и тогда правильным результатом является "111111".
                  Чтобы убрать наложенные, пишем

                  ExpandedWrap disabled
                    Do until Instr(Stri, "121") = 0
                       Stri = Replace(Stri, "121", "11")
                    Loop
                  Сообщение отредактировано: eka -
                    В этом случае вообще единиц не будет :(
                    И... см. #7
                    Акина делает уклон на возможное исключение :lol: что имеет место быть.
                    eka, ваш пример от этого не спасает.
                    Есть выход - юзать Instr, Left$ & Mid$
                      ExpandedWrap disabled
                        Sub v()
                        Dim Stri, Stri1, Repl As String
                        Dim i, iL, iL1, j As Long
                         
                        Stri = "1212121"
                        iL = Len(Stri)
                        Repl = "121"
                        iL1 = Len(Repl)
                         
                        For i = 1 To iL - iL1 + 1
                            If Mid(Stri, i, iL1) = Repl Then
                                Stri1 = Stri1 & "11"
                                For j = 1 To iL1 - 1
                                    If i + j <= iL Then
                                        If Mid(Stri, i + j, iL1) = Repl Then
                                            Stri1 = Stri1 & "11"
                                            i = i + j - 1
                                        End If
                                    End If
                                Next j
                                i = i + iL1 - 1
                            Else
                                Stri1 = Stri1 & Mid(Stri, i, 1)
                            End If
                        Next i
                         
                        MsgBox Stri1
                         
                         
                        End Sub
                        eka, неверно :no:
                        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                        0 пользователей:


                        Рейтинг@Mail.ru
                        [ Script execution time: 0,0363 ]   [ 16 queries used ]   [ Generated: 6.05.24, 10:39 GMT ]