|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
booby Вот этот код распечатает все вхождения Component в ваш бинарный массив Из вышеизложенного понятно что это не подойдет ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 20:45 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
booby Вот этот код распечатает все вхождения Component в ваш бинарный массив Исходя из вышеизложенного, такой алгоритм меня никак устроить не может ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 20:48 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
booby Вот этот код распечатает все вхождения Component в ваш бинарный массив Исходя из вышеизложенного, такой алгоритм меня никак устроить не может! ------------------------- Прошу прощенья за дублирование, сообщения куда-то улетали. Оказалось на 2ю страницу ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 20:52 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Дмитрий П. booby Вот этот код распечатает все вхождения Component в ваш бинарный массив Исходя из вышеизложенного, такой алгоритм меня никак устроить не может ааа... ну, извини тогда... мне самому жаль, что попытался "отнять у тебя время". ... |
|||
:
Нравится:
Не нравится:
|
|||
04.11.2020, 21:01 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
booby А все-таки Ваш первый пример работает именно как надо! Код: vbnet 1. 2. 3.
Вот это ближе к моему файлу и Ваш код все равно находит оба "Component" До сего дня я считал что любая строковая функция застревает на нуле. Исследование StrStrA подтвердило это! Сегодня я случайно обратил внимание на фрагмент в моем первом посте, вернее на его боевой аналог (там str обычная, НЕ с фиксированной длиной) и обнаружил что в конце цикла в переменой str присутствуют символы chr(0) и (другие непринтабельные). И получается что функция InStr (как и InStrB) не застревает на нулях (и находит "Component")! Странно, вроде бы везде пишут что ноль это терминатор. Причем в файле есть блоки поиска где нет "Component" - на чем же тогда функция InStr останавливает поиск? booby , Да, Ваш пример позволит мне избавится от побайтного копирования блока поиска. СПАСИБО! ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2020, 17:51 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Дмитрий П., Ура! теперь может быть продолжение... как найти автор"C2" и 4 байта 01 00 00 00 т.е. С2.1 - рассказывать, или теперь уже сами сообразите? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2020, 18:20 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Дмитрий П. booby А все-таки Ваш первый пример работает именно как надо! Код: vbnet 1. 2. 3.
Вот это ближе к моему файлу и Ваш код все равно находит оба "Component" До сего дня я считал что любая строковая функция застревает на нуле. Исследование StrStrA подтвердило это! Сегодня я случайно обратил внимание на фрагмент в моем первом посте, вернее на его боевой аналог (там str обычная, НЕ с фиксированной длиной) и обнаружил что в конце цикла в переменой str присутствуют символы chr(0) и (другие непринтабельные). И получается что функция InStr (как и InStrB) не застревает на нулях (и находит "Component")! Странно, вроде бы везде пишут что ноль это терминатор. Причем в файле есть блоки поиска где нет "Component" - на чем же тогда функция InStr останавливает поиск? booby , Да, Ваш пример позволит мне избавится от побайтного копирования блока поиска. СПАСИБО! Если Вам нужно именно оптимальное решение, то это неверный путь. Т.к. при каждом вызове InStrB происходит преобразование массивов в строки, т.е. создаются временные Variant переменные которые потом преобразуются в Variant содержащие строки - по сути тоже что у Вас было изначально. InStr предназначена для работы со строками, а не с массивами. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2020, 19:09 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
ATM-TURBO 2, вы про "premature optimization" когда-нибудь слышали, или про "критикуя предлагай"? Что касается преобразования, то ваше утверждение-преостережение сводится к указанию на полное копирование массива при каждом поиске. В приципе, это достаточно легко проверяется экспериментальным путем, и, если оно на самом деле справедливо в полной мере (чего я не знаю точно), то содержательно переход от "плохого" кода к "хорошему на строках" происходит легко. У человека разумного механизма поиска в руках вообще не было. Теперь есть. Это совсем даже близко не то же самое "что было с самого начала", хотя бы по числу конкатенаций, и, тем более, по общей структуре кода. Хотя на 20-килобайтных файлах разницу в скорости все равно будет измерить трудно. Вы как-то свое свое утверждение о полном копировании можете аргументировать? Вместе с тем, "ещё лучше" для него, может быть почти со 100% вероятностью , и особенно в условиях именно VB6, окажется самописный Кнут-Моррис-Пратт. Если уж и переходить, конкретно от instrb над массивами, то гораздо лучше в его окружении, переходить не к работе с чистыми строками, а сразу к Пратту над массивами, имея на руках версию кода, которая работает целиком на массивах. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2020, 19:42 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
ATM-TURBO 2, между, прочим, я бы скорее предполагал, что внутреннее устройство Instr/Instrb состоит в том, что по полученному указателю на строку строится описатель массива, с которым и происходит дальнейшая работа поиска. По крайней мере теоретически, и по крайней мере для instrb, это оставляет возможность компилятору обеспечить прямую работу с полученным байтовым массивом. Все сказанное здесь - лишь версия. Я в прошлом программировал на VB6, сейчас лишь пару-тройку раз в год vba касаюсь, по какому-нибудь несчастному случаю. Так что и многие детали, касательные языка, уже основательно забыты. Но я не помню, не отложилось у меня в памяти ребра именно в указанном вами разрезе. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2020, 19:52 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Дмитрий П. До сего дня я считал что любая строковая функция застревает на нуле. Ошибались. В VB нигде не используются нуль-терминированные строки. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2020, 20:13 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
booby ATM-TURBO 2, вы про "premature optimization" когда-нибудь слышали, или про "критикуя предлагай"? Да я уже скинул решение на другом форуме . booby Что касается преобразования, то ваше утверждение-преостережение сводится к указанию на полное копирование массива при каждом поиске. В приципе, это достаточно легко проверяется экспериментальным путем, и, если оно на самом деле справедливо в полной мере (чего я не знаю точно), то содержательно переход от "плохого" кода к "хорошему на строках" происходит легко. Поверь мне, я очень хорошо знаю как работает VB6 и его рантайм. Чтобы не быть голословным скажу что происходит вызов функции __vbaStrVarCopy которая принимая Variant в котором байтовый массив, преобразует его в BSTR посредством вызова VariantChangeTypeEx, которая в свою очередь непосредственно выполняет преобразование с помощью функции BstrFromVector. И это происходит дважды для каждого аргумента. booby Это совсем даже близко не то же самое "что было с самого начала", хотя бы по числу конкатенаций, и, тем более, по общей структуре кода. Хотя на 20-килобайтных файлах разницу в скорости все равно будет измерить трудно. Вы как-то свое свое утверждение о полном копировании можете аргументировать? Да, выше уже написал. "Что было с самого начала" - в алгоритмическом плане, происходит все тоже самое создание временной строки ну и т.п. У ТС задача в совмещении переменных, что явно противоположно. booby между, прочим, я бы скорее предполагал, что внутреннее устройство Instr/Instrb состоит в том, что по полученному указателю на строку строится описатель массива, с которым и происходит дальнейшая работа поиска. Нет. В этом никакого смысла нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2020, 20:19 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
Alibek B. Дмитрий П. До сего дня я считал что любая строковая функция застревает на нуле. Ошибались. В VB нигде не используются нуль-терминированные строки. Везде используются. BSTR - это строка с предпросчитаной длиной и нуль-терминалом. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2020, 20:22 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
ATM-TURBO 2, уфф... Как вы вообще туда ходите... С таким диким количеством диких баннеров. все проклясть можно только от одного вида... Сдается, у вас там ошибка в алгоритме поиска. Вы безусловно сдвигаете образец в точку обнаруженного несопоставления. Что прямо ошибка, если частичное сопоставление уже произошло. В алгоритме не хватает масива префиксов до настоящего Пратта. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.11.2020, 21:05 |
|
Совмщение переменных разного типа
|
|||
---|---|---|---|
#18+
ATM-TURBO 2, Я ошибся. Код у вас там правильный. Это меня внешний вид сайта, видимо, ошеломил. Но я не вижу причин не писать в этом месте стандартный вложенный цикл. такой вариант мною на глаз легче воспринимается: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37.
(накидал без проверки) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.11.2020, 01:31 |
|
|
start [/forum/topic.php?fid=60&msg=40015648&tid=2154767]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
54ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
2ms |
others: | 280ms |
total: | 418ms |
0 / 0 |