Оптимизация разбора строковой переменной

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
-=Jaga=-
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 17.10.2007 (Ср) 8:44

Оптимизация разбора строковой переменной

Сообщение -=Jaga=- » 18.02.2008 (Пн) 12:31

Доброго времени, Форумчане!
Вводное описание проблемы:
Имею строку вида "c=Место: cN=Имя: cO=Отчество: cFam=Фамилия"
Нужно загнать массив то что находится между равно и ":". Сейчас я это делаю с помощью Split и разделителем выбираю ":". Но это мне не очень нравиться т.к. приходится дополнительно обрабатывать полученный результат.

Вопрос: Есть ли функция позволяющая взять результат между первым и вторым значением?
Первое значение в этом примере является:
с=
cN=
cO=
cFam=
вторым значением я подразумеваю ":"

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.02.2008 (Пн) 12:38

Вручную обрабатывать строку через InStr будет быстрее.
Но выигрыш, по сравнению с Split, невелик, а трудоемкость выше.
Обычно достаточно Split.
Lasciate ogni speranza, voi ch'entrate.

-=Jaga=-
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 17.10.2007 (Ср) 8:44

Сообщение -=Jaga=- » 18.02.2008 (Пн) 12:54

Спасибо, понял.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 18.02.2008 (Пн) 15:13

Код: Выделить всё
Private Sub Command1_Click()
Dim s As String
Dim x As Long, y As Long, py As Long, i As Long
Dim r() As String
Dim t As Single
   
    s = "c=Место: cN=Имя: cO=Отчество: cFam=Фамилия"
   
    t = Timer
    For x = 1 To 1000000
        r = Split(s, ":")
    Next
    Debug.Print "split", Timer - t
   
    t = Timer
    For x = 1 To 1000000
        ReDim r(5)
        i = 0: y = 0: py = 0
        Do
            y = InStr(y + 1, s, ":")
            If y <> 0 Then
                r(i) = Mid$(s, py + 1, y - py - 1)
                py = y
                i = i + 1
            Else
                Exit Do
            End If
        Loop
    Next
    Debug.Print "instr", Timer - t
    Debug.Print
End Sub

split          2,28125
instr          1,296875

split          2,28125
instr          1,296875

split          2,265625
instr          1,296875

split          2,265625
instr          1,296875

split          2,28125
instr          1,296875
Двухкратный - не такой уж невеликий выйгрыш. Трудоемкость мизерная.
Лучший способ понять что-то самому — объяснить это другому.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.02.2008 (Пн) 15:38

Может от процессора зависит?
У меня InStr давал процентов 10 выигрыша по сравнению со Split.
Lasciate ogni speranza, voi ch'entrate.

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 18.02.2008 (Пн) 15:50

Может. А ты в IDE сравнивал или в exe? Возможно в exe разница действительно меньше.
Лучший способ понять что-то самому — объяснить это другому.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.02.2008 (Пн) 16:02

В IDE, причем с большой строкой (20 тысяч символов).
Впрочем, тут тоже можно посмотреть: http://www.xbeat.net/vbspeed/c_Split.htm
Lasciate ogni speranza, voi ch'entrate.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot, The trick и гости: 49

    TopList  
cron