Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.135.219.166] |
|
Сообщ.
#1
,
|
|
|
Есть например некая строковая переменная:12356351236688
Требуется получить строку:115635116688 т.е.Найти в строке 123 и заменить на 11 конечно такая задачка решается очень просто при помощи функции MID и & а требуется получить более универсальную функцию которая находила бы любую подстроку в строке и меняла на требуемую: Начало функции я представляю так: Public Function Find(byVal A1 as string,byVal A2 as string,byVal A3 as string) as string 'Где A1-искомая строка A2-требуемая подстрока A3-на что заменить Find=ответ end function как более грамотно это организовать? |
Сообщ.
#2
,
|
|
|
Dethlord, есть функция из стандартной библиотеки VB, вот она:
Result = Replace("123-555555-123-555", "123", "11") P.S. Думаю, ты догадался какие аргументы, к чему относятся... |
Сообщ.
#3
,
|
|
|
СПАСИБО!
|
Сообщ.
#4
,
|
|
|
Dethlord не перестает меня удивлять
|
Сообщ.
#5
,
|
|
|
Цитата Dethlord @ требуется получить более универсальную функцию которая находила бы любую подстроку в строке и меняла на требуемую Гм... следует ли результат выполнения Result = Replace("1212121", "121", "11") считать верным? |
Сообщ.
#6
,
|
|
|
все зависит от обновления Expression в ходе выполнения Replase, если бы обновлялось было бы 1111, имхо.
|
Сообщ.
#7
,
|
|
|
Цитата GRAFF @ все зависит от обновления Expression в ходе выполнения Replaсe Нет никакого обновления. Логика работы Replace везде абсолютно такая: Replace(str,from,to) == Join(Split(str, from),to) Соответственно Replace("1212121", "121", "11") даёт "11211". Однако не исключено, что в каком-то случае логика требует замены каждого вхождения, включая наложенные, и тогда правильным результатом является "111111". |
Сообщ.
#8
,
|
|
|
Чтобы убрать наложенные, пишем
Do until Instr(Stri, "121") = 0 Stri = Replace(Stri, "121", "11") Loop |
Сообщ.
#9
,
|
|
|
В этом случае вообще единиц не будет
И... см. #7 Акина делает уклон на возможное исключение что имеет место быть. eka, ваш пример от этого не спасает. Есть выход - юзать Instr, Left$ & Mid$ |
Сообщ.
#10
,
|
|
|
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 |
Сообщ.
#11
,
|
|
|
eka, неверно
|