Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Оптимизировать обход массива

3.0K
15 апреля 2011 года
ctraus
91 / / 16.06.2006
Здравствуйте.Задача обойти массив (строку) и обработать каждый байт,например равный 255 и на выходе получить HEX:FF.На больших размерах не дождаться окончания.VB не знаю совершенно.
Код:
Dim i
    Dim acode
    Dim char
    Dim tmp
    Dim tmp2
    Dim tmp3
    Dim tmp4
   
   Encode = Data
     
    For i = Len(Encode ) To 1 Step -1
       tmp = Mid(Encode , i, 1)
       acode = Asc(tmp)
   
        tmp2 = Left(Encode , i - 1)
        tmp3 = Hex(acode)
        tmp4 = Mid(Encode , i + 1)
        If Len(tmp3) > 1 Then
            Encode =  tmp2 & "HEX:" & tmp3 & tmp4
        Else
            Encode =  tmp2 & "HEX:0" & tmp3 & tmp4
        End If
    Next
327
17 апреля 2011 года
UserNet2008
748 / / 03.04.2010
Цитата:
VB не знаю совершенно.


А выше приведенный код откуда.

Как я понимаю, что Вы хотите увидеть файл?
255 или FF это "НИЧЕГО"

3.0K
18 апреля 2011 года
ctraus
91 / / 16.06.2006
Цитата: UserNet2008
А выше приведенный код откуда.

Как я понимаю, что Вы хотите увидеть файл?
255 или FF это "НИЧЕГО"



Собираю по кускам код.Это для примера 255.Файл побайтно пройти надо.С тем же успехом там может быть любое другое число

62K
18 апреля 2011 года
shanemac51
10 / / 27.07.2010
не поняла идеи--что надо получить и[COLOR="red"]какова длина переменной data(max)[/COLOR]
Код:
-----------data=            1234567890
отладка по шагам------------------------------------
 10           123456789HEX:30
 9            12345678HEX:39HEX:30
 8            1234567HEX:38HEX:39HEX:30
 7            123456HEX:37HEX:38HEX:39HEX:30
 6            12345HEX:36HEX:37HEX:38HEX:39HEX:30
 5            1234HEX:35HEX:36HEX:37HEX:38HEX:39HEX:30
 4            123HEX:34HEX:35HEX:36HEX:37HEX:38HEX:39HEX:30
 3            12HEX:33HEX:34HEX:35HEX:36HEX:37HEX:38HEX:39HEX:30
 2            1HEX:32HEX:33HEX:34HEX:35HEX:36HEX:37HEX:38HEX:39HEX:30
 1            HEX:31HEX:32HEX:33HEX:34HEX:35HEX:36HEX:37HEX:38HEX:39HEX:30


или HEX: 31 32 33 34 35 36 37 38 39 30
[COLOR="red"]дополнительно[/COLOR]
-данные юникод или анси
3.0K
19 апреля 2011 года
ctraus
91 / / 16.06.2006
Данные просто BYTE т.е значения от 0до255,а не строки.
Например:
4D 5A 90 00 должны превратиться в Hex:4D Hex:5A Hex:90 Hex:00.Длинна может быть до 100 миллионов,а может и 100 байт)
327
19 апреля 2011 года
UserNet2008
748 / / 03.04.2010
Данные просто BYTE т.е значения от 0до255,:confused:а не строки:confused:.


Так что ли
3.0K
20 апреля 2011 года
ctraus
91 / / 16.06.2006
UserNet2008 Именно так все.По куску кода что я привел дождаться окончания обхода 100кб файла надо постараться,а 3 мб вообще нереально.Может быть как-то внешнюю прогу (написанную на C,например)запустить передав туда массив,но как результат ее работы обратно в скрипт получить(без помощи промежуточных файлов)?
62K
20 апреля 2011 года
shanemac51
10 / / 27.07.2010
Код:
Sub a110418_1048()
Dim i
    Dim acode
    Dim char
    Dim tmp
    Dim tmp2
    Dim tmp3
    Dim tmp4
    Dim xm(0 To 255) As String
    i = -1
    Do While i < 255
    i = i + 1
    xm(i) = " HEX:" & Hex(i)
    Debug.Print i, xm(i), Chr(i)
    Loop
 
   encode = "юя0Й ЦУКЕ НГШЩ ЗХЪЁ ЯЧHJ "
   'Data
     dt1 = Now
     Open "C:\RAB\00.TXT" For Output As #1
  For j1 = 1 To 1000000 \ 20
  Print #1, ""
  Debug.Print j1 \ 100;
    For i = 1 To Len(encode)
       tmp = Mid(encode, i, 1)
       acode = Asc(tmp)
 

tmp3 = xm(acode)
        Print #1, tmp3;
        'i, encode
    Next i
    Next j1
    Debug.Print
    Debug.Print DateDiff("S", Now, dt1)   '''7 сек на 1млн циклов
    Close #1
End Sub
HEX:FE HEX:FF HEX:30 HEX:C9 HEX:20 HEX:D6 HEX:D3 HEX:CA HEX:C5 HEX:20 HEX:CD HEX:C3 HEX:D8 HEX:D9 HEX:20 HEX:C7 HEX:D5 HEX:DA HEX:A8 HEX:20 HEX:DF HEX:D7 HEX:48 HEX:4A HEX:20
 HEX:FE HEX:FF HEX:30 HEX:C9 HEX:20 HEX:D6 HEX:D3 HEX:CA HEX:C5 HEX:20 HEX:CD HEX:C3 HEX:D8 HEX:D9 HEX:20 HEX:C7 HEX:D5 HEX:DA HEX:A8 HEX:20 HEX:DF HEX:D7 HEX:48 HEX:4A HEX:20
 HEX:FE HEX:FF HEX:30 HEX:C9 HEX:20 HEX:D6 HEX:D3 HEX:CA HEX:C5 HEX:20 HEX:CD HEX:C3 HEX:D8 HEX:D9 HEX:20 HEX:C7 HEX:D5 HEX:DA HEX:A8 HEX:20 HEX:DF HEX:D7 HEX:48 HEX:4A HEX:20
327
20 апреля 2011 года
UserNet2008
748 / / 03.04.2010
Цитата:
дождаться окончания обхода 100кб файла надо постараться,а 3 мб вообще нереально.



А где вы выводите в TextBox или RichTextBox, то попробуйте в RichTextBox загрузить 3-5мб то придеться подождать одну две минуты и это что VB, что в C++. Дело в том что TextBox или RichTextBox созданы для таких программ как "Привет мир". Нужно искать коммерческие продукты.

По вашему коду добавьте:
................
End If
[COLOR="blue"]DoEvents[/COLOR]
Next

3.0K
22 апреля 2011 года
ctraus
91 / / 16.06.2006
shanemac51
Спасибо.Проверю.
Выводить ни в какие текстовые поля ничего не надо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог