- •Строки
- •События, связанные с клавиатурой
- •Списки
- •Управляющий элемент ListBox
- •List
- •Внешний вид: стандартный или с флажком
- •Содержит количество строк в списке
- •Описание
- •Управляющий элемент ComboBox
- •Изменение характеристик шрифта
- •Количество экранных и принтерных шрифтов
- •Файлы
- •Режимы доступа к файлам
- •Текстовые файлы
- •Управляющие элементы для работы с файлами
- •Открыть диалог установка параметров принтера
Строки
Строки – это переменные типа String. Перечислим основные функции, предназначенные для работы со строками.
1.Instr([start,]str1,str2[,compare]) – возвращает позицию первого вхождения подстроки str2 в строке str1, начиная с левого конца строки с позиции start. Если аргумент start не указан, поиск начинается с первой позиции и до конца строки. Compare – метод, выбираемый для сравнения строк. Он может принимать следующие значения: vbBinaryCompare = 0 – выполняет двоичное сравнение выражений (в
этом случае прописные и строчные символы отличаются), vbTextCompare = 1 – выполняет посимвольное сравнение выражений. Если задан аргумент compare, то аргумент start должен быть указан обязательно. Например, в следующей строке
переменная n примет значение 7, так как именно в седьмой позиции с начала строки находится пробел.
2.InstrRev(str1,str2[,start[,compare]]) – возвращает позицию первого вхождения подстроки str2 в строке str1, начиная с правого конца строки с позиции start. Если этот аргумент не указан, поиск начинается с последней позиции и до начала строки. Например, в следующей строке n=InstrRev(“Visual Basic”, “ “) переменная n примет значение 6, так как в шестой позиции с конца строки находится пробел.
3.Join(list[,delimiter]) – возвращает строку, созданную объединением строк, содержащихся в указанном одномерном массиве символов list. Delimiter – символ, разделитель строк в возвращаемой строке. По
умолчанию – пробел. Например,
Dim ss(1) As String
ss(0) = "Visual" : ss(1) = "Basic"
Text1 = Join(ss) 'будет Visual Basic ss(0) = "Maк" : ss(1) = "Дональд"
Text2 = Join(ss, “”) 'будет MaкДональд
4.Split(str1, delimiter) – возвращает массив строк, сформированный из строки str1, элементы которой отделяются друг от друга разделителем
delimiter.
v= Split(“Visual Basic”, “ “)
‘будет v(0) = "Visual" и v(1) = "Basic"
5.Left(str1, length) – возвращает заданное число символов с левого конца строки str1. Length – количество возвращаемых символов. Если length = 0, то возвращается пустая строка. Если length больше, чем длина
строки str1, то возвращается вся строка str1.
v= Left(“Visual Basic”, 6) |
'будет v = "Visual" |
6. Len(str1|varname) – возвращает размер строки в символах или размер переменной в байтах.
m= Len(“Visual Basic”) |
'будет m = 12 |
7.Ltrim(str1), Rtrim(str1), Trim(str1) – удаляют пробелы в строке слева, справа или с обеих сторон.
8.Mid(str1,start[,length]) –возвращает указанную часть строки, начиная с
позиции start.
v= Mid(“Visual Basic”, 6, 5) 'будет v = "l Bas"
9.Replace(str1, find, repl [, start[, count[, compare]]]) – возвращает строку,
вкоторой одна последовательность символов find заменяется другой repl в строке str1 определенное (count) число раз. Если аргумент count не указан, то по умолчанию он принимается равным –1, что требует
замены всех возможных вхождений.
v= Replace(“Visual Basic”, “a”, “y”) 'будет v= "Visuyl Bysic"
10.Right(str1,length) – возвращает число символов с правого конца строки.
v= Right(“Visual Basic”, 5) 'будет v = "Basic"
11.Space(number) – возвращает указанное число пробелов.
12.StrComp(str1,str2[,compare]) – возвращает результат сравнения двух указанных строк. Если результат будет равен –1, то str1<str2, если равен 0, то str1=str2, если равен 1, то str1>str2.
13.String(number,character) – возвращает строку, в которой символы character повторяются number раз. Если аргумент character имеет числовое значение, то он интерпретируется как код символа. Также этот аргумент может быть символом или строкой символов.
14.Asc(string) – возвращает код первого символа строки.
15.Chr(ANSIcode) – возвращает символ, соответствующий указанному числовому коду. Символы в диапазоне от 0 до 31 не отображаются и предназначены для управления работой: например, chr(13)=vbCr –
перевод каретки, chr(9)=vbTab – табуляция, chr(13)+chr(10)=vbCrLf –
перевод каретки и возврат строки.
16.LenB(str1) – возвращает размер строки в байтах. Например,
Print LenB(″ABCD″) ′для строки ″ABCD″ в ОЗУ будет выделено 8 байт Print Len(″ABCD″)′а здесь в ОЗУ будет выделено лишь 4 байта
Пример 23. Дана строка, содержащая следующие элементы: индекс, название города, адрес, фамилия, имя и отчество, которые отделены друг от друга запятыми. Создать из строки массив слов. Выделить из строки индекс, название города, отчество, а также заменить все запятые на символы «#» и определить, какая информация записана между 20-й и 35-й позициями в исходной строке.
DefStr S-T
Private Sub Command1_Click()
Dim G As Double
Dim D1 As Integer, D2 As Integer
S = "450098, г.Уфа, ул. Ленина, д.170/1, кв.20, Зуев Павел Львович"
m = Split(S, ",") |
'Формируем массив слов, разделенных запятыми |
|
For i% = 0 To UBound(m) |
|
|
s2 = s2 & m(i) & vbCrLf |
|
|
Next |
|
|
Text1 = s2 |
|
|
D1 = InStr(S, ",") |
'Позиция первой запятой=7 |
|
t = Left(S, D1 - 1) |
|
'Значение t = "450098" |
Text2 = t & " (до позиции " & D1 - 1 & ")" |
||
D2 = InStr(8, S, ",") |
'Найти следующую запятую, начиная с позиции 8 |
|
t = Mid(S, D1 + 1, D2 - D1) |
'Значение t = " г.Уфа" |
|
Text3 = t & " (c " & D1 + 1 & " до " & D2 - 1 & " позиции)" |
||
D = InStrRev(S, " ") |
|
'Позиция последнего пробела=54 |
s2 = Right(S, Len(S) - D) |
'Выделить последнее слово="Львович" |
Text4 = s2 & " (с позиции " & D + 1 & ")" S4 = Mid(S, 20, 15)
Text5 = S4
s5 = Replace(S, ",", "#") Text6 = s5
End Sub
Рис. 30
Пример 24. Дана строка. Подсчитать количество слов, разделенных множеством разделителей: пробелами, запятыми, точками и точками с запятой.
Option Base 1
Dim slovo(50) As String, s As String
'Предполагаем, что в строке может быть не более 50 слов
Private Sub Command1_Click()
s = LTrim(s) |
'Убрать из строки ведущие пробелы |
k% = Len(s) |
'Определить длину строки |
n% = 1 |
'Задать счетчик слов, равный 1 |
slovo(n) = "" |
'Подготовить слово для заполнения символами |
For i% = 1 To k |
|
s1$ = Mid(s, i, 1) |
'Выделим i-й символ из строки |
If s1 = " " Or s1 = "," Or s1 = "." Or s1 = ";" Then |
|
'Если это следующие разделители ",. ;", то выполнить |
|
s1 = Mid(s, i + 1, 1) |
', выделить второй символ и проверить его. |
' Если он не является символом-разделителем,
' то счетчик слов увеличивается, и переходим к следующему слову. If Not (s1 = " " Or s1 = "," Or s1 = "." Or s1 = ";") And (i <> k) Then
'Здесь And (i <> k) означает анализ без последнего символа
n = n + 1 |
|
|
slovo(n) = "" |
|
|
End If |
' Если же второй и последующие символы являются |
|
' разделителями, то ничего не предпринимать в верхней конструкции IF |
||
Else |
'Если же первый считанный символ не является символом- |
|
|
|
'разделителем, то заполняем им слово |
slovo(n) = slovo(n) & s1 |
||
End If |
|
|
Next i |
|
|
s = "" |
|
|
For i = 1 To n |
'Формируем строку из слов |
s = s & slovo(i) & vbCrLf Next
Text2 = s & "Количество слов = " & n
End Sub
Private Sub Command2_Click()
End
End Sub
Private Sub Form_Load()
'Для всех объектов на форме в режиме конструирования определить 'свойства Font=MS Sans Serif, 8, жирный, для кнопок
'Command1.Caption=”Определить”, Command2.Caption=”Выход”, 'для полей Text1.Multiline=True, Text2.Multiline=True, Text2.ScrollBars=2
s = Chr(34) & "Светильник тела есть око; итак, если око твое будет "
s = s & " чисто, то и все тело твое будет светло; а если оно будет худо, " s = s & "то и тело твое будет темно" & Chr(34) & ". (Евангелие от Луки)"
Text1 = s : |
Text2 = "" |
End Sub |
|
Рис. 31
Пример 25. Дана строка. Определить, какое количество букв русского алфавита находится в строке.
Dim s As String, ch As String * 1 |
'Символ, выделяемый из строки |
|
Dim a(192 To 255) As Byte |
|
'От 192 до 255 коды русских букв |
'a – массив счетчиков букв. Он обнуляется автоматически |
||
Private Sub Command1_Click() |
|
|
k% = Len(s) |
|
|
For i = 1 To k |
|
|
ch = Mid(s, i, 1) |
'Выделяем символ из строки и проверяем |
|
If ch >= Chr(192) And ch <= Chr(255) Then 'соответствие его диапазону |
||
a(Asc(ch)) = a(Asc(ch)) + 1 |
|
'Если попал, то подсчитываем |
End If |
|
|
Next |
|
|
s = "" |
'Принудительно очищаем строку |
|
For i = 192 To 255 |
'Цикл формирования букв и их количество |
If a(i) <> 0 Then
s = s & Chr(i) & Space(7) & "Кол-во= " & a(i) & vbTab & "10-й код=" & i & _
End If |
vbTab & "16-й код= " & Hex(i) & vbCrLf |
|
|
Next |
|
Text2 = s |
'Вывод |
End Sub
Private Sub Command2_Click()
End
End Sub
Private Sub Form_Load()
s = "Целью книги является привитие навыков программирования " s = s & "на основе готовых примеров."
Text1 = s : Text2 = "" : Caption = "Подсчет количества букв" Command1.Caption = "Подсчитать"
Command2.Caption = "Выход"
End Sub
Рис. 32
Попутно в программе выводятся десятичный и шестнадцатеричный (функцией Hex) коды символов. Основываясь на рассмотренном примере,