Простой текст, почему так долго

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

Простой текст, почему так долго

Сообщение Piratik » 03.03.2006 (Пт) 18:18

Вот одна из моих первых програм на VBA в ворде 2003 меняет текст на что то не читаемое.

Dim str As String
Dim num() As Byte
---------------------------------------
Private Sub cb2_Click()
Randomize
j = Int(255 * Rnd + 1)
num = textbox.Text
For i = 0 To UBound(num) Step 2
num(i + 1) = j
Next
textbox.Text = num
End Sub
--------------------------------------
Private Sub cb1_Click()
num = textbox.Text
For i = 0 To UBound(num) Step 2
num(i + 1) = 0
Next
textbox.Text = num
End Sub

Так вот текст объемом около 18К иногда до 10...40 сек выполняет при попытке закодировать и всегда быстро выполняется при попытке раскодировать.
И еще на VB6 этот код уже не работает и всега читает из тексбокса неправильно. Тоесть всегда четные байты равны 0 хотя писал я в него совсем не то. Почему?

Piratik
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 03.03.2006 (Пт) 17:57

Продолжение

Сообщение Piratik » 04.03.2006 (Сб) 23:20

В общем выяснилось вот что. На самом деле обработка файла проходит быстро а вот следующий оператор после цикла TextBox=num делает проблемы, но не всегда а при определеных значениях старшего байта юникода. Интересно чем это может быть вызвано и почему по прежнему в VB6 я все время читаю в старшем байте юникода 0 независимо что б я в него не писал. Может он там юникод не поддерживает?

Dex
Постоялец
Постоялец
 
Сообщения: 346
Зарегистрирован: 09.08.2004 (Пн) 16:11

Сообщение Dex » 05.03.2006 (Вс) 18:43

После цикла ты не указал из какого элемента массива присваиваешь.
А вооще у тя размерность массива должна указана быть.

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

Сообщение alibek » 05.03.2006 (Вс) 18:53

Dex, не говори глупые вещи.
Lasciate ogni speranza, voi ch'entrate.

Piratik
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 03.03.2006 (Пт) 17:57

Продолжение

Сообщение Piratik » 05.03.2006 (Вс) 22:56

Я на самом деле присваиваю строку а не конкретный элемент массива.
А вопрос остается таким же , почему TextBox.Text=num занимает много времени, причем при разных значениях "j" (смотри код выше) время может быть от нескольких секунд до десятков секунд.
Ну и 2 вопрос про то что например VB6 просто игнорирует старший байт юникода , в нашем случае все равно какой я "j" записал, будет прочитано всегда как 0. В то время как в word 2003 все нормально

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Продолжение

Сообщение Andrey Fedorov » 06.03.2006 (Пн) 10:49

Piratik писал(а):А вопрос остается таким же , почему TextBox.Text=num занимает много времени, причем при разных значениях "j" (смотри код выше) время может быть от нескольких секунд до десятков секунд.


Присвоение TextBox.Text=num должно проходить достаточно быстро, т.е тормоза у тебя явно где-то в другом месте. По приведенному огрызку кода это не определить. Вот если бы приложил простенький тестовый проектик, то можно было бы глянуть...

Piratik писал(а):Ну и 2 вопрос про то что например VB6 просто игнорирует старший байт юникода , в нашем случае все равно какой я "j" записал, будет прочитано всегда как 0. В то время как в word 2003 все нормально


Что там у тебя конкретно по такому коду - непонятно. Но контролы в VB6 неуенкодные, а в последних версиях офиса - с поддержкой уенкода.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Piratik
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 03.03.2006 (Пт) 17:57

Сообщение Piratik » 06.03.2006 (Пн) 23:58

Andrey Fedorov,
Присвоение TextBox.Text=num должно проходить достаточно быстро, т.е тормоза у тебя явно где-то в другом месте.


На самом деле я точно знаю что дело в присвоении. Уже проверено. Мое обьяснение этому такое - система пытается задействовать шрифт или локаль скорее даже, которой нет и на обработку этого у нее уходит время. Ты и сам можешь это проверить, код то маленький.

По приведенному огрызку кода это не определить. Вот если бы приложил простенький тестовый проектик, то можно было бы глянуть...

На самом деле это и есть весь код, абсолютно весь.

контролы в VB6 неуенкодные, а в последних версиях офиса - с поддержкой уенкода

Вот это как раз многое объясняет, а то я дурачек думал что в VB6 полный юникод, а если так, как ты говоришь, то тогда все ясно.
Спасибо


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

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

Сейчас этот форум просматривают: Google-бот, SemrushBot и гости: 122

    TopList