Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Программирование на Basic / VBA


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / Basic/VBA

Выпуск № 309
от 28.06.2006, 18:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 182, Экспертов: 29
В номере:Вопросов: 2, Ответов: 4


Вопрос № 47115: Спасиба ! За пример ( проверить сторку на наличие цыфр) Вопрос снят. Public Function IsDigits(str As String) As Boolean Dim i As Integer IsDigits=True For i = 1 To Len(str) If Not IsNumeric(Mid$(str, i, 1)) Then IsDigits...
Вопрос № 47137: Как проверить на ошибку весь проэкт ? Так проверяю на ошибки один модуль , а как весь проэкт ? Private Sub a11_Click(Index As Integer) On Error GoTo EL .... .... .... EL: LE.Caption = Err.Description If Err....

Вопрос № 47.115
Спасиба !
За пример ( проверить сторку на наличие цыфр) Вопрос снят.

Public Function IsDigits(str As String) As Boolean
Dim i As Integer
IsDigits=True
For i = 1 To Len(str)
If Not IsNumeric(Mid$(str, i, 1)) Then IsDigits=False
Next
End Function
Отправлен: 23.06.2006, 10:19
Вопрос задал: Гробенюк Александр Александрович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Филатов Евгений Геннадьевич
Здравствуйте, Гробенюк Александр Александрович!

Как вариант проверка содержимого строки на наличие нескольких введенных чисел. Для проверки в новом проекте на форме помещаем Text1 со свойством MultiLine=False и Label1 со свойством WordWrap=True. В код формы помещаем код из приложения и запускаем.
При вводе числа отделяются одинарными пробелами. Можно вставить проверку и удаление повторяющихся пробелов. После ввода строки чисел нажать ENTER, внизу в столбик появятся числа либо текст <не число> в случае, если один из наборов символов введен с ошибкой.

С уважением.

Приложение:

Ответ отправил: Филатов Евгений Геннадьевич (статус: 4-ый класс)
Ответ отправлен: 23.06.2006, 14:55

Отвечает: Залетин Виталий Викторович (мь!тарь)
Здравствуйте, Гробенюк Александр Александрович!
Понимаю, что немного не в тему, но предлагаю небольшой бенчмарк, который покажет, что в больших строках Ваш алгоритм притормозит:

Private Declare Function timeGetTime Lib "winmm" () As Long

Dim i As Long
Dim t As Long
Sub ee()
Dim s As String
Dim IsDigit As Boolean

s = "123456789012345678901234567890123456789012345678901234567890" & _
"12345678901234567890123456789012345678901234567890" & _
"12345678901234567890123456789012345678901234567890" & _
"12345678901234567890123456789012345678901234567890" & _
"12345678901234567890123456789012345678901234567890" & _
"12345678901234567890123456789012345678901234567890" & _
"12345678901234567890123456789012345678901234567890" & _
"12345678901234567890123456789012345678901234567890" & _
"12345678901234567890123456789012345678901234567890" & _
"12345678901234567890123456789012345678901234567890" & _
"12345678901234567890123456789012345678901234567890" & _
"12345678901234567890123456789012345678901234567890" & _
"12345678901234567890123456789012345678901234567890" & _
"12345678901234567890123456789012345678901234567890" & _
"12345678901234567890123456789012345678901234567890" & _
"12345678901234567890123456789012345678901234567890" & _
"12345678901234567890123456789012345678901234567890" & _
"12345678901234567890123456789012345678901234567890" & _
"12345678901234567890123456789012345678901234567890" & _
"12345678901234567890123456789012345678901234567890" & _
"12345678901234567890123456789012345678901234567890" & _
"12345678901234567890123456789012345678901234567890" & _
"12345678901234567890123456789012345678901234567890"

'////////////////////////////////////////////////////////
'Ваш способ
t = timeGetTime()

IsDigit=True
For i = 1 To Len(s)
If Not IsNumeric(Mid$(s, i, 1)) Then IsDigit = False
Next

MsgBox "IsDigit=" & IsDigit & vbCrLf & _
"Time=" & CStr(timeGetTime() - t)

'////////////////////////////////////////////////////////
'Мой способ
t = timeGetTime()
For i = 0 To 9
IsDigit = (InStr(1, s, CStr(i)) > 0)
Next i

MsgBox "IsDigit=" & IsDigit & vbCrLf & _
"Time=" & CStr(timeGetTime() - t)
End Sub

Время сканирования всей строки посимвольно и время проверки на существование одной из 10 цифр, как видите несколько отличается. У меня в вордовском VBA время такое: Ваш алгоритм 3 мс., мой алгоритм - 0 мс.

Я понимаю, в реальной жизни такаЯ ситуация может и не встретиться, но почему бы не оптимизировать алгоритм, когда он на это так и напрашивается? Бейсик тем и хорош, что позволяет развить неплохой стиль программирования.
---------
Учиться никогда не поздно. Особенно программированию!
Ответ отправил: Залетин Виталий Викторович (мь!тарь) (статус: Студент)
Ответ отправлен: 24.06.2006, 15:14


Вопрос № 47.137
Как проверить на ошибку весь проэкт ?

Так проверяю на ошибки один модуль , а как весь проэкт ?
Private Sub a11_Click(Index As Integer)
On Error GoTo EL
....
....
....
EL:
LE.Caption = Err.Description
If Err.Description <> "" Then MsgBox "Ошибка !", vbExclamation, " "
Exit Sub
End Sub

С уважением Александр.
Отправлен: 23.06.2006, 14:08
Вопрос задал: Гробенюк Александр Александрович (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Александр Шевченко
Здравствуйте, Гробенюк Александр Александрович!
Никак нельзя. В VB 6 вообще скудная обработка ошибок :(.
Ответ отправил: Александр Шевченко (статус: 5-ый класс)
Ответ отправлен: 23.06.2006, 14:11

Отвечает: Залетин Виталий Викторович (мь!тарь)
Здравствуйте, Гробенюк Александр Александрович!
Расставьте везде On Error Goto... (в каждой процедуре или функции, где хотябы теоретически может возникнуть ошибка), и, конечно, Option Explicit в начале любого модуля - вот об этом никогда нельзя забывать.
---------
Учиться никогда не поздно. Особенно программированию!
Ответ отправил: Залетин Виталий Викторович (мь!тарь) (статус: Студент)
Ответ отправлен: 24.06.2006, 15:21


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное