понедельник, 29 августа 2011 г.

Продолжая VBA. Строковые функции

■ Asc() — эта функция позволяет вернуть числовой код для переданного символа. Например, Asc("D") вернет 68. Эту функцию удобно использовать для того, чтобы определить следующую или предыдущую букву. Обычно она используется вместе с функцией Chr(), которая производит обратную операцию — возвращает символ по переданному его числовому коду. Например, такой код в Excel позволяет написать в ячейки с A1 по A20 последовательно буквы русского алфавита от A до У:
Dim n, nCharCode As Integer
n = 1
nCharCode = Asc("А")
Do While n <= 20
ActiveWorkbook.ActiveSheet.Range("A" & n).Value = Chr(nCharCode)
n = n + 1
nCharCode = nCharCode + 1
Loop
Варианты этой функции — AscB() и AscW(). AscB() возвращает только первый байт числового кода для символа, а AscW() возвращает код для символа в кодировке Unicode.
■ Chr() — возвращает символ по его числовому коду. Помимо того, что используется паре с функцией Asc() (см. предыдущий пример), без нее не обойтись еще в одной ситуации: когда нужно вывести служебный символ. Например, нам нужно напечатать в Word значение "Газпром" (в кавычках). Кавычка — это служебный символ, и попытка использовать строку вида:
Selection.Text = ""Газпром""
приведет к синтаксической ошибке. А вот так все будет в порядке:
Selection.Text = Chr(34) & "Газпром" & Chr(34)
Есть варианты этой функции — ChrB() и ChrW(). Работают аналогично та-ким же вариантам для функции Asc().
■ InStr() и InStrRev() — одни из самых популярных функций. Позволяют обнаружить в теле строковой переменной последовательность символов и вернуть ее позицию. Если последовательность не обнаружена, то возвращается 0. Функция InStr() ищет с начала строки, а InStrRev() — с конца.
■ Left(), Right(), Mid() — позволяют взять указанное вами количество символов из существующей строковой переменной слева, справа или из середины соответственно.
■ Len() — возвращает число символов в строке (длину строки). Часто используется с циклами, операциями замены и т. п.
■ LCase() и UCase() — переводят строку в нижний и верхний регистры соответственно. Часто используются для подготовки значения к сравнению, когда регистр не важен (фамилии, названия фирм, городов и т. п.).
■ LSet() и RSet() — заполняют одну переменную символами другой без изменения ее длины (соответственно слева и справа). Лишние символы обрезаются, на место недостающих подставляются пробелы.
■ LTrim(), RTrim(), Trim() — убирают пробелы соответственно слева, справа или и слева, и справа.
■ Replace() — заменяет в строке одну последовательность символов на другую.
■ Space() и String() — возвращают строку из указанного вами количества пробелов или символов соответственно. Обычно используются для форматирования вывода совместно с функцией Len(). Еще одна похожая функция — Spc(), которая используется для форматирования вывода на консоль. Она размножает пробелы с учетом ширины командной строки.
■ StrComp() — сравнивает две строки.
■ StrConv() — преобразует строку (в Unicode и обратно, в верхний и ниж-ний регистры, первую букву слов заглавной и т. п.).
■ StrReverse() — "переворачивает" строку, разместив ее символы в обратном порядке.
■ Tab() — еще одна функция, которая используется для форматирования вывода на консоль. Размножает символы табуляции в том количестве, в котором вы укажете. Если никакое количество не указано, просто вставляет символ табуляции. Для вставки символа табуляции в строковое значе-ние можно также использовать константу vbTab.

понедельник, 15 августа 2011 г.

VBA next. Операторы и циклы.

Повторение - мать учения.
Операторы условного и безусловного перехода.
If... Then
Конструкция такая:
If Условие Then
Команды1
[ElseIf УсловиеN Then
КомандыN]
[Else
Команды2]
End If
При этом:
■ Условие — выражение, которое проверяется на истинность. Если оно истинно, то выполняются Команды1, если ложно — Команды2;
■ УсловияN — дополнительные условия, которые также можно проверить. В случае, если они выполняются (выражение УсловияN истинно), то выполняются КомандыN.

Select... Case
Select Case Выражение
Case Условие1
Команды1
[Case УсловиеN
КомандыN]
[Case Else
Команды2]
End Select

И оператор GoTo, безусловного перехода, метка.

Теперь о циклах. C предусловием:
For...Next:
For iCounter = 1 to 10
MsgBox "Счетчик: " & iCounter
Next

Если нужно пройтись по всем элементам:
For Each...Next:
For Each oWbk in Workbooks
MsgBox oWbk.Name
Next

С постусловием:
До тех пор, пока утвержденеи истинно:
Do While...Loop
Do While MyVar < 10 MyVar = MyVar + 1 MsgBox "MyVar = " & MyVar Loop До тех пор, пока утверждение ложно (не станет истинным): Do Until...Loop
Do Until MyVar >= 10
MyVar = MyVar + 1
MsgBox "MyVar = " & MyVar
Loop

While...Wend
While My Var < 10
MyVar = MyVar + 1
WScript.Echo "MyVar = " & MyVar
Wend

воскресенье, 14 августа 2011 г.

Отступление от Тамре. VBA

Мне тут понадобилось накалякать программку - ибо вручную делать это раз за разом нет больше сил, и заодно ознакомится с языком. Так вот - читаю учебник. Конспектирование правильного обзывания переменных:
Чаще всего используется так называемое венгерское согла-шение (в честь одного из программистов Microsoft, Charles Simonyi, венгра по национальности):
■ имя переменной должно начинаться с префикса, записанного строчными буквами. Префикс указывает, что именно будет храниться в этой пере- менной:
• str (или s) — String, символьное значение;
• fn (или f) — функция;
• sub — процедура;
• c (или все буквы имени заглавные) — константа;
• b — Boolean, логическое значение (True или False);
• d — дата;
• obj (или o) — ссылка на объект;
• n — числовое значение;
■ имена функций, методов и каждое слово в составном слове должно начи-наться с заглавной буквы:
MsgBox objMyDocument.Name
Sub CheckDateSub()

понедельник, 8 августа 2011 г.

Тестирование объектно-ориентированного ПО

Тут всего пара слов - в суть я особо вникнуть не могу, т.к. не владею предметом, но ньюанс и важный - все же вынесла. При тестировании ООПО нужно учитывать, что всегда остается вопрос - будут ли работать методы, заданные в родительском классе, если их вызовет дочерний (который хоть и наследует род-е функции, но сам имеет и свои). "Протестировать каждый метод в контексте всех классов, которые могут получить к ним доступ".

Создание тестовых примеров (продолжение конспекта)

Тестовые случаи (категории тестов, прмиеняемые к схеме) желательно фиксировать. Вряд ли, не обладая феноменальной памятью, мы сможем воспроизвести все те издевательства над системой, после которых ее отправили на доработку. А повторная прогонка после доработки необходима - проверить всё ли исправлено и корректно ли работают те функции, которые и раньше отрабатывали правильно. Итак, нам нужны краткие описания тестов. В общем случае она выглядит так:
1. ID тестового прмиера (идентификатор, уникальный номер);
2. Элемент схемы тестов (номер в той схеме с требованиями);
3. Предыдущее состоние (состояние системы до теста);
4. Входные данные (что мы, собственно, делаем);
5. Ожидаемые результаты (что должна делать система);
6. Реальные результаты (что в итоге она делает).
Отмечу, что при тестировании сайта (собственный опыт) предыдущее состояние не важно, зато важна последовательностей действий перед входными данными (впрочем, вся последовательность может включатся в "входые данные").
Упрощенный формат документации имеет место быть, однако только при условии, что никому, кроме вас не придется ею пользоваться в полной мере (не привлекаются новые сотрудниик и аудиторы). Упрощать схему можно как удобно тестеру, некоторые примеры рассмотрены в книге, мне же приводить их лень - все равно если мы захотим упростить тесты "под себя" мы их упростим так, как удобно нам самим.
Для фиксации очень удобны электронные таблицы.

Конспект-3

Глава next. С одной стороны условия тестирования упрощаются (времени уже не в обрез), но документация все еще в плохом виде; с другой - усложняется - теперь подход должен быть шире. Используется схематический подход к фиксации требований. Потом даются категории тестов:
1. Нет данных (что случится, если не ввести данные; есть ли значение по умолчанию);
2. Повторный ввод данных (быстрая отправка одних и тех же данных - как поведет себя система - игнорирует повторный ввод, возьмет только последние данные, обработает как независимые данные, вернет сообщение об ошибке);
3. Верные данные (диапазон, граничные значения);
4. Неверные данные (выход за границы диапазона, неверный формат данных);
5. Сброс (кнопка "отмена" или выдернуть кабель: как отреагирует система);
6. Потери мощности (актуально для ПО техники);
7. Создание напряжений в системе;
8. Тестирование характеристик.
Далее все типы применяются к схеме с требованиями.