Страница: 1 |
Страница: 1 |
Вопрос: Функция Split!
Добавлено: 29.07.04 14:02
Автор вопроса: kyb | Web-сайт:
Как с помощью этой функции разделить текст? Поподробнее...
Ответы
Всего ответов: 13
Номер ответа: 1
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #1
Добавлено: 29.07.04 14:22
Все просто, как качан капусты
Dim res As Variant
res=Split("Visual-Basic-Forever!","-"
MsgBox res(0)
MsgBox res(1)
MsgBox res(2)
Номер ответа: 2
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #2
Добавлено: 29.07.04 14:24
Ни в коем случае не Dim res As Variant
лучше уж Dim res() As String
Номер ответа: 3
Автор ответа:
dNW
Вопросов: 30
Ответов: 683
Профиль | | #3
Добавлено: 29.07.04 15:37
Опять экономия памяти?
Номер ответа: 4
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #4
Добавлено: 29.07.04 16:15
И времени
Номер ответа: 5
Автор ответа:
Иван
Администратор
ICQ: 147688925
Вопросов: 24
Ответов: 708
Web-сайт:
Профиль | | #5
Добавлено: 29.07.04 19:07
String не будет работать в этом случае!
Split возвращает Variant.
Номер ответа: 6
Автор ответа:
Иван
Администратор
ICQ: 147688925
Вопросов: 24
Ответов: 708
Web-сайт:
Профиль | | #6
Добавлено: 29.07.04 19:10
Dim res() As String
Будет работать, но какая тут экономия памяти и времени?
Не нужно изобретать велосипед. Split вернет Variant а VB преобразует его в String... не меняйте шило на мыло.
Номер ответа: 7
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #7
Добавлено: 29.07.04 20:36
Хм... а как же последующее обращние к переменной !?
Номер ответа: 8
Автор ответа:
CyRax
Разработчик Offline Client
ICQ: 204447456
Вопросов: 180
Ответов: 4229
Web-сайт:
Профиль | | #8
Добавлено: 29.07.04 21:29
String там врядли прокатит.
Ведь Variant можно преобразовать в массив (чем и занимается SPLIT), а String ни как не получится.
Номер ответа: 9
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #9
Добавлено: 29.07.04 22:10
CyRax, см. внимательнее, плз... я предлагал и предлагаю преобразовывать в массив строк... при этом при многократных обращениях к массиву должна, по идее, увеличиться скорость, чем это было бы, если бы обращались мы к варинт переменной!
Номер ответа: 10
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #10
Добавлено: 29.07.04 23:34
Sne, не вводи народ в заблуждение ))
Функция Split работает с переменной типа вариант. Она выдает переменную Variant которую уже потом можно в силу её особенностей интерпретировать как массив. Пытаясь ускорить работу заданием вместо Variant массива строк, ты получишь обратный эффект: будет работать медленнее, от 1.5 до 2 раз. Причина - дополнительное преобразование массива строк в переменную Variant.
Вот примерчик:
 im i As Long, t As Single
 im res '() As String
t = GetTickCount()
For i = 0 To 100000
res = Split("Visual-Basic-Forever-Visual-Basic-Forever-Visual-Basic-Forever-Visual-Basic-Forever-Visual-Basic-Forever-Visual-Basic-Forever-!", "-"
Next i
 ebug.Print Str$(GetTickCount() - t)
Если объявить как String, то цикл занимает 1500-1550 мс. Если объявить как Variant, то 900-920 мс
Номер ответа: 11
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #11
Добавлено: 30.07.04 00:57
это да, а потом обьращаться к чему скорее, к массиву символов, или к вариант типу !?
В одном месте проигрываем, в другом выигрываем... так всегда...
Номер ответа: 12
Автор ответа:
cresta
Вопросов: 117
Ответов: 1538
Профиль | | #12
Добавлено: 30.07.04 02:05
И обращаться к варианту тоже как ни странно, покажется, быстрее чем к массиву. Я таким образом в одной проге порядка 80% времени экономил, где был большой массив элементов и надо было быстренько просматривать его на наличие строк, которые в реальном масштабе времени набирались на клавиатуре. Массив строк не успевал, в Вариант - успевал с запасом.
Вариант медленнее при работе с числами. Вообще, имхо, в VB есть две вещи, которые все нещадно и незаслуженно ругают: msvbvm60.dll и variant. Если умело пользоваться, то это очень мощный инструмент. Конечно, проще написать As String и VB тебя услужливо подстрахует. Но если предусмотреть всё, не оглядываясь на подстраховки, то Variant - это хорошая вещь. Думаю пример со сплитом этому подтверждение.
Номер ответа: 13
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #13
Добавлено: 30.07.04 11:58
Хм... лано, перестаем ругать Вариант тип... Кстати и при работе с числами он не такой уж и тормозной...