Данные символьного типа и файлы в vb 6.0, работы с файлами
Данные символьного типа
Под каждый символ в памяти компьютера выделяется 1 байт (8 бит) памяти в ASCIIкодировке(либо два байта вUnicode). Кодовые таблицы содержат по 256 символов. Первые коды с номера 0 по 127в любой кодировке одинаковы. С номера 0 по 31– управляющие символы, номер32– пробел. Далее символы: с 48 по 57- цифры от 0 до 9, с 65 по 90– заглавные буквы латинского алфавита, с 97 по 122– малые буквы латинского алфавита. В промежутках - знаки. Позиции таблицы со128 по 256 используются для национальных символов различных языков.
Символьные данные можно сравнивать друг с другом, используя те же операции сравнения, что и с данными арифметического типа. Сравнение происходит посимвольно (побайтно) слева направо. Фактически сравниваются соответствующие коды символов.
Для обработки символьных данных можно использовать операцию сцепления операндов (знак операции – символ «+» или &).
Строку символов всегда можно преобразовать в одномерный массив отдельных символов, расщепив его при помощи функции MID илиSplit.После обработки массива, его элементы следует обратно слить в строку при помощи операции сцепления & (Конкатенации).
Решение подавляющего большинства задач требует владения встроенными функциями VB6
Функция |
Выполняемые действия |
Пример |
LEN(x) |
Определяет длину указанной символьной переменной в байтах (количество символов) |
Fio=”Иванов” L=LEN(FIO) L=6 |
LEFT(x,k) |
Вырезает из переменной хслеваkсимволов. Вырезанные символы можно присвоить другой переменной |
Fio=”Иванов” T=LEFT(FIO,4) T=”Иван” |
RIGHT(x,k) |
Аналогично предыдущей функции, только справа |
Fio=”Иванов” T=RIGHT(FIO,2) T=”ов” |
MID(x,pos,k) |
Вырезает kсимволов из переменнойx, начиная с позицииpos, включительно |
Fio=”Иванов” T=MID(FIO,2,4) T=”вано” |
VAL(x) |
Преобразует указанную символьную переменную хв десятичное число. |
p=”-243.65” s=val(p)+100 s=-143.65 |
CINT(x) |
Преобразует указанную символьную переменную хв целое число |
p=”-243” s=val(p)+100 s=-143 |
STR(y) |
Преобразует число yв строку символов. С учетом знака. Если число положительное, вместо знака ставится пробел |
a=123.45 b=-678 s=str(b)+str(a) s=”-678 123.45” |
CHR(N) |
Результат – символ, соответствующий указанному номеру в таблице символов |
For I=65 to 90 Print chr(i) next Вывод заглавных букв латинского алфавита |
ASC(x) |
Определяет числовой код первого символа в строке х |
Print ASC(”123”) Print ASC(” 1a2m”) Print ASC(”ABC”) На экране 49 32 65 |
INSTR(n,x,y) |
Начиная с позиции n, определяет позицию первого появления подстрокиyв строкеx. Если не находит, то результат 0. |
x=”кукуруза” y=”ку” Print INSTR(1,x,y); Print INSTR(2,x,y); На экране 1 3
|
LTRIM(x) |
Возвращает копию строки х после удаления символов пробела из левой части строки (начальные пробелы) |
|
RTRIM(x) |
Возвращает копию строки х после удаления символов пробела из правой части строки (конечные пробелы) |
|
TRIM(x) |
Возвращает копию строки х после удаления начальных и конечных пробелов |
|
LCASE(x) |
Возвращает копию строки х со всеми символами верхнего регистра, преобразованными в символы нижнего регистра |
|
UCASE(x) |
Возвращает копию строки х со всеми символами нижнего регистра, преобразованными в символы верхнего регистра |
|
STRCONV(x, p) |
Изменяет регистр букв символьной строки, в зависимости от значения параметра Р Р=1, верхний регистр Р=2, нижний регистр Р=3, только первая заглавная |
|
STRREVERSE(x) |
Изменяет порядок следования в строке на обратный |
|
SPACE(n) |
Возвращает строку пробелов длиной nсимволов |
|
REPLASE(S, S1, S2, n, k) |
Заменяет в строке SподстрокуS1 на подстрокуS2, начиная с позицииn,k- количество замен, если не указано, то заменяются все вхожденияS1. |
s1=”121113” print Replace(s1,”1”,””,1) На экране 23 |
Функция Split
Новая функция, которая появилась в Visual Basic 6.0. Функция Split используется для расщепления строки на подстроки с использованием разделителя подстрок. Возвращает одномерный массив с типом данных Variant(String), содержащий в качестве элементов найденные подстроки.
Split(Expression,[Delimiter],[Limit],[Compare] )
Expression- Обязательный аргумент - строка, которую нужно расщепить. Если аргумент содержит нулевую строку(""), то возвращается пустой массив, т.е. массив без элементов и данных.
Delimiter -Необязательный аргумент - символы типаString, которые используются в качестве разделителя строки. Если аргумент опущен, то по умолчанию используется символ пробела (" "). Если же аргумент содержит нулевую строку(""), то возвращается одноэлементный массив, содержащий целую строку.
Limit-Необязательный аргумент, содержащий число возвращаемых подстрок. Если аргумент опущен или равен -1, то обрабатывается вся строка.
Compare-Необязательный аргумент - числовая константа, определяющая вид сравнения.
Функция Join
Функция, выполняющая обратное действие – объединение элементов массива в строку, используя указанный разделитель.
Join (name_array, [Delimiter])
Пример. Дан текст. Определить количество предложений. Найти количество слов, начинающихся с буквы «п».На форме в поле Text1 – располагается исходный текст, в поле Text2 – количество предложений, в поле Text3 – количество слов, начинающихся на букву п.
Private Sub Command1_Click()
s1$ = "Привет, Поль! С праздником! С наилучшими пожеланиями Питер."
Text1.Text = s1
ns = Len(s1)
ks = 0 : kp = 0
For i = 1 To ns
a$ = Mid(s1, i, 1)
If (a = ".") Or (a = "?") Or (a = "!") Then kp = kp + 1
Next i
For i = 1 To ns - 2
Select Case i
Case Is = 1
If Mid(s1, i, 1) = "П" Or Mid(s1, i, 1) = "п" Then ks = ks + 1
Case Else
If Mid(s1, i, 2) = " П" Or Mid(s1, i, 2) = " п" Then ks = ks + 1
End Select
Next i
Text2.Text = Str(kp)
Text3.Text = Str(ks)
End Sub
Private Sub Command2_Click()
Unload Me
EndSub
При вводе символа в текстовом окне в метках отображается код последнего и предпоследнего символов |
Private Sub Command1_Click() Unload Me End Sub
Private Sub Text1_Change() Label3.Caption = Asc(Right(Text1.Text, 1)) If Len(Text1.Text) > 1 Then Label4.Caption = Asc(Mid(Text1.Text, Len(Text1.Text) - 1, 1)) End If End Sub |
Оператор Mid
Синтаксис
Mid(stringvar, start [, length]) = string,
где stringvar- имя строчной переменной для модификации,
start- позиция символа вstringvar, с которой начинается заменяемая часть строки,
length- число заменяемых символов,
string - строковое выражение для замены.
Mid(s1, 9) = "Жиль"
Число заменяемых символов всегда меньше или равно числу символов в stringvar.
Не следует путать этот оператор с одноименной функцией!
Файлы
В зависимости от организационной структуры информации в файле,способа хранения и доступак этой информации принято выделять три типа файлов:
Файлы последовательного доступа. Как правило, это текстовые файлы. Структурной единицей таких файлов является строка. Данные в них хранятся в виде цепочкиASCIIкодов и могут обрабатываться любым текстовым редактором. Запись и считывание данных при работе с такими файлами происходит строго последовательно (нельзя получить доступ ко второй записи, не прочитав первой).
Файлы произвольного доступа. Это структурированные файлы, которые содержат информацию в виде записей. Например, файлы баз данных. Компоненты (поля) в записях таких файлов могут иметь разные типы. Но все записи файлов последовательного доступа имеют постоянную длину и порядковый номер. Это позволяет получить доступ сразу к нужной записи без последовательного просмотра всех предыдущих.
Бинарные (двоичные) файлы. Это могут быть файлы последовательного доступа, но информация в них представлена в виде байтов или блоков байтов. К таким файлам можно отнести файлы с расширениемexe, т.е. программные. Это могут быть файлы произвольного доступа: размер записи у них всегда равен 1 байту, и любой байт можно считать по его порядковому номеру.