powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Скорость замены символа в строке.
17 сообщений из 17, страница 1 из 1
Скорость замены символа в строке.
    #32657895
МаксимВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно заменить в строковой переменной один символ на другой. Я здесь маленько написал. Вроде работает. Но когда доходит до 5000 замен, уж очень медленно все делается. Большие задержки по времени: 5000 замен - около 3-х секунд.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Option Explicit

 '*** ActiveX Control Event *** 
Private Sub Command1_Click()
Dim str1 As String
    str1$ = "П" & Chr$( 97 ) & "па + Мам" & Chr$( 97 )
    If InStr( 1 , str1$, Chr$( 97 )) Then
        str1$ = ReplSymbol(ByVal str1$, ByVal Chr$( 97 ), ByVal Chr$( 224 ))
    End If
    Debug.Print str1$
End Sub

 '/* >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
 '/* Заменяет в строке один символ на другой 
Private Function ReplSymbol(ByVal strConvert As String, ByVal strSymb1 As String, ByVal strSymb2 As String) As String
Dim i As Integer
    i =  1 
    Do While i <>  0 
        i = InStr(i, strConvert$, strSymb1$, vbTextCompare)
        If i <>  0  Then Mid$(strConvert$, i,  1 ) = strSymb2$
    Loop
    ReplSymbol$ = strConvert$
End Function
Может кто-нибудь что-то посоветует?
То, что можно сделать быстрее на VB это точно. У меня есть готовое приложение, где такие замены деляются менее одной секунды.
...
Рейтинг: 0 / 0
Скорость замены символа в строке.
    #32657947
kalex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не знаю, подойдет ли тебе. Попробуй использовать функцию Replace.
...
Рейтинг: 0 / 0
Скорость замены символа в строке.
    #32658028
МаксимВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ok. Не по глазам. Делаю то, что уже в VB есть!
...
Рейтинг: 0 / 0
Скорость замены символа в строке.
    #32658127
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МаксимВOk. Не по глазам. Делаю то, что уже в VB есть!
а replace в vb нет ?
...
Рейтинг: 0 / 0
Скорость замены символа в строке.
    #32658338
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здесь есть вариант самодельной функции Replace, работающей в ~12 раз быстрее стандартной.
...
Рейтинг: 0 / 0
Скорость замены символа в строке.
    #32658615
MegaDimon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибка вот где:
Код: plaintext
1.
2.
3.
...
If InStr([color=red] [b]1 [/color][/b], str1$, Chr$( 97 )) Then
...

Смотри, у тебя всегда поиск начинается с еденицы! А должен не начинатся с 1, а продолжатся с позиции в которой ты заменил последний символ.

Потому и замедляется, что строку он у тебя будет просматривать от начала до найденного символа немеренное количество раз! А должен только один проход от начала до конца делать.
...
Рейтинг: 0 / 0
Скорость замены символа в строке.
    #32659592
МаксимВ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MegaDimonОшибка вот где:

Смотри, у тебя всегда поиск начинается с еденицы! А должен не начинатся с 1, а продолжатся с позиции в которой ты заменил последний символ.


посмотри внимательней на код.

Всем спасибо.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Скорость замены символа в строке.
    #33832080
ba4inskii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос в дополнение!
А как заменить символ не на один символ, а на строку?
типа @ на ret_rus?

___________________________________________________
Система, не рассчитанная на идиота - идиотская система.
...
Рейтинг: 0 / 0
Скорость замены символа в строке.
    #33832200
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ответ в дополнение!
marvan Здесь есть вариант самодельной функции Replace, работающей в ~12 раз быстрее стандартной.
...
Рейтинг: 0 / 0
Скорость замены символа в строке.
    #33832321
ba4inskii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
marvanОтвет в дополнение!
marvan Здесь есть вариант самодельной функции Replace, работающей в ~12 раз быстрее стандартной.

marvan Вы бы не могли ткнуть меня носов именно в то, что мне нужно по этой ссылке?)
У меня с англицким пока проблемы ((
...
Рейтинг: 0 / 0
Скорость замены символа в строке.
    #33832788
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
например
Добавить в проект класс clsReplace, добавить в него вышеуказанный код и далее в нужном месте программы вызываем:
Код: plaintext
1.
2.
3.
4.
    Dim r As New clsReplace
    Dim s As String
    s = "aaaaa@aaa aaaaa@aaaaaaa"
    s = r.Replace10(s, "@", "ret_rus")
    'Debug.Print s
...
Рейтинг: 0 / 0
Скорость замены символа в строке.
    #33833318
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
marvan Здесь есть вариант самодельной функции Replace, работающей в ~12 раз быстрее стандартной.Я проверял эту функцию. Сандартная быстрее. Правда проверял только в ide, может скомпилированная быстрее.
...
Рейтинг: 0 / 0
Скорость замены символа в строке.
    #33833399
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверил еще раз. Скорость зависит от того что на что заменяешь. Вот тест:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
Private Sub Command1_Click()
Dim t
Dim s As String, r As String
Dim x As Long
Dim c As clsReplace
    Set c = New clsReplace
    t = Timer
    For x =  1  To  1000 
        s = Space( 1000 )
        r = Replace(s, " ", "x")
    Next x
    Debug.Print Timer - t
    t = Timer
    For x =  1  To  1000 
        s = Space( 1000 )
        r = c.Replace11(s, " ", "x")
    Next x
    Debug.Print Timer - t
    Debug.Print
End Sub
Результаты - 1,171875 стандартный против 0,65625 альтернативный.
Если пробел заменять на "xx", то 1,171875 против 1,265625 соответственно.
"ххх" дает 1,171875 (опять таки!) и 1,421875
...
Рейтинг: 0 / 0
Скорость замены символа в строке.
    #33833464
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Резолюция такая: если длина результирующей строки после замены будет отличаться от исходной или заменяются длинные подстроки - используй стандартный Replace.

Фактически альтернативный выйграл только в первом тесте - замена одного символа на один.
...
Рейтинг: 0 / 0
Скорость замены символа в строке.
    #33833500
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
Public Sub Test1()
    Dim r As New clsReplace
    Dim s As String
    Dim o As String
    Dim i As Long
    For i =  1  To  1000 
        s = s & "aaaaa@aaa aaaaa@aaaaaaa"
    Next
    For i =  1  To  1000 
        o = r.Replace10(s, "@", "ret_rus")
    Next
End Sub

Public Sub Test2()
    Dim s As String
    Dim o As String
    Dim i As Long
    s = "aaaaa@aaa aaaaa@aaaaaaa"
    For i =  1  To  1000 
        s = s & "aaaaa@aaa aaaaa@aaaaaaa"
    Next
    For i =  1  To  1000 
        o = Replace(s, "@", "ret_rus")
    Next
End Sub

IDE - ради спортивного интереса
11,4696 - Replace10
2,2387 - ReplaceVB
EXE - выигрыш альтернативной функции
0,7092 - Replace10
2,2815 - ReplaceVB

2 Antonariy
ради чего проверки затевать?
там ведь таблица есть, где приводятся результаты множества тестов.
и ни где стандартный Replace не выиграл.
...
Рейтинг: 0 / 0
Скорость замены символа в строке.
    #33833558
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На заборах тоже таблицы бывают. Лишняя проверка никода не помешает. Действительно, альтернативный Replace в скомпилированном виде рулит.))
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Скорость замены символа в строке.
    #34918551
Guest_06-11-07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
Private saDst As bstrapi.SAFEARRAY1D
а откуда этот тип данных брать?
а то Replace11 без него никак.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Скорость замены символа в строке.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]