Работа со строками
FreeBasic располагает неплохими средствами для управления строками. Однако есть и минусы во встроенных средствах. Мы их тоже рассмотрим.
Преобразование числа в строку и наоборот
Вам часто придется преобразовывать числа в строку , так же как и строки в числа. Для того чтобы преобразовать число в строку можно использовать функцию STR , для обратной операции есть оператор VAL . Конечно оператор VAL преобразовывает только ту строку, которая является числом в строковом представлении. Пример:
Dim As Integer AA=567 Dim As String ST = Str(AA) ? ST ? Val(ST) Sleep
У команды VAL есть небольшой недостаток. При использовании этого
оператора, ваша программа в системе Windows прибавляет в размере почти на 30 кб.
Конечно сейчас это уже не размер, но что поделать есть люди, у которых "размер
имеет значение". Вместо VAL можно использовать функцию ATOF, которая в Windows
почти не добавляет размера. В Linux ее тоже можно использовать, но там разницы
нет (размер не меняется). Пример:
#INCLUDE "crt/stdlib.bi" Dim As Single hh= atof ("15.44")
Кроме оператора VAL для преобразования из строки в число можно
использовать подобные операторы:
ValInt - преобразовывание в целое 32 битное число со знаком
(Integer)
ValUInt - преобразовывание в целое 32 битное число без знака
(UInteger)
ValLng - преобразование в целое 64 битное число со знаком
(Longint)
ValULng - преобразование в целое 64 битное число без знака
(ULongint)
Соединение строк
Для соединения строк можно использовать оператор сложения + , либо что еще лучше оператор соединения & . Разница у них очевидна. Оператор + может складывать строки, но для того чтобы в строку записать число имеющее не строковой тип , это число надо преобразовывать в строку отдельной функцией STR , а оператор & это два в одном. Пример:
Dim As String SS=" Apple" ? Str(17) + SS ? 17 & SS Sleep
Заполнение строк
Две функции SPACE и STRING, способные заполнять или создавать строки,
заполненные символами.
SPACE заполняет пробелами
STRING любыми
символами
Функция Space имеет только один параметр:
- кол-во пробелов для заполнения.
Функция String имеет два параметра:
- кол-во символов для заполнения
- символ в строковом представлении или ASCII код
Пример:
Dim As String SS SS="A" & Space(7) & "Z" ? SS SS= "X" & String(7,"-") & "X" ? SS Sleep
Длина строки
С древних бейсиков существует команда для получения длины строки и носит название LEN . Она имеет всего один параметр: строка, которую нужно измерить.
Пример:
? Len("Hello World") ? Len("FreeBasic") Sleep
Поиск строки
Для поиска символов или слов в строке существует функция INSTR. Она имеет три параметра:
- Стартовая позиция (необязательный параметр, по умолчанию с 1 позиции)
- Строка, в которой производится поиск
- Строка, которую следует найти
Функция возвращает позицию, по которой находится искомая строка. Если строка не найдена, возвратит 0. Функция чувствительна к регистру символов.
Пример:
Dim As String SS= "FreeBasic" ? Instr(SS, "Bas") Sleep
Похожая функция INSTRREV только функция ищет с конца. Параметры у нее похожие, как и у INSTR , но параметр "Стартовая позиция" идет последним InStrRev(Строка где искать , Строка-шаблон что искать , Стартовая позиция):
Dim As String SS= "FreeBasic" ? Instrrev(SS, "re") Sleep
Получение части строки
Для того чтобы получить часть строки в FreeBasic есть несколько
функций:
LEFT - получение строки слева на нужное кол-во символов
RIGHT - получение строки справа на нужное кол-во символов
MID - получение любой части строки
У функций Left и Right параметры одинаковые:
- Строка из которой вырезается
- Кол-во символов
Пример:
Dim As String SS = "FreeBasic" ? Left(SS,4) ? Right(SS,5) Sleep
Функция MID универсальна и наиболее употребляема. Она имеет 3
параметра:
- Строка из которой вырезается
- Стартовая позиция
- Кол-во символов(необязательный параметр, если не указывать, то до конца строки)
Пример:
Dim As String SS= "FreeBasic" ? Mid(SS,5,3) ? Mid(SS,5) Sleep
Очистка от ненужных символов
Функции LTRIM , RTRIM , TRIM позволяют очищать от любых ненужных символов в строке. По умолчанию очищают от пробелов.
LTRIM - очистка с левого края пока встречается символ(ы)
RTRIM - очистка с
правого края пока встречается символ(ы)
TRIM - очистка с обоих сторон пока
встречается символ(ы)
Функции имеют одинаковые параметры:
- Очищаемая строка
- Ненужные в строке символы
Пример:
Dim s2 As String = "AAAttaaAAyyIIAA" Print Rtrim(s2,"A") Print Ltrim(s2,"AAAt") Print Trim(s2,"A") Sleep
Кроме того у этих трех функций есть одна полезняшка. Если перед 2
параметром поставить ключевое слово ANY , то функции значительно расширяют свои
возможности: во втором параметре можно передавать набор из различных символов,
которые следует очистить. Особенно эта фича полезна для функции TRIM
Пример:
Dim s2 As String = "AAAttaaAAyyIIAA" Print Rtrim(s2, Any "AI") Print Ltrim(s2, Any "At") Print Trim(s2, Any "Ata") Sleep
Разницу надеюсь заметили. И все бы было хорошо, но функции RTRIM , LTRIM
и TRIM не работают с русскими символами. Поэтому для русских символов придется
использовать связку INSTR + MID
Работа с отдельными символами
Из прошлой статьи вы наверняка еще помните оператор [ ] . В строках не стали ничего нового придумывать для того, чтобы получать доступ к определенному символу. Отсчет так же идет с нуля. Однако при получении значения этим оператором, будет возвращаться не сам символ, а его код в соответствующей кодировке в нашем случае в кодировке ASCII.
Пример:
Dim As String SS="Freebasic" ? ss[4] ss[4]=66 ? ss Sleep
В данном случае мы в консоли наблюдаем число 98 (код буквы b). Далее на
место этой буквы мы записываем код заглавной буквы B и выводим переправленное
слово в консоль.
Для того, чтобы нам получать не код символа, а его строковое представление нужно использовать функцию CHR для преобразования кода символа. Более того, чтобы нам не париться по поводу какой код какому символу принадлежит, есть обратная операция преобразования строкового представления в ASCII код. Это функция ASC
Пример:
Dim As String SS="Freebasic" ? Chr(ss[4]) ss[4]=Asc("B") ? ss Sleep
Работа с регистром символов
Для того, чтобы преобразовывать символы в верхний или нижний регистр можно воспользоваться функциями LCASE (нижний регистр) и UCASE (верхний регистр)
Пример:
Dim As String SS="AbCdEfGhIjKlMn" ? Lcase(SS) ? Ucase(SS) Sleep
Запустите пример, думаю недопониманий не будет.
Все таки при все
простоте использования этих функций, они тоже не работают с русскими символами,
но решить этот вопрос в Windows оказалось не сложно. В функциях API Windows есть
превосходные функции, работающие сразу с многочисленными кодировками
CharLower и CharUpper. Использование этих функций довольно
простое:
#INCLUDE "windows.bi" Dim As String SS="АбВгДеЁжЗиЙкЛ" CharLower(SS) MessageBox(0,SS,"",0) CharUpper(SS) MessageBox(0,SS,"",0) Sleep
Для того, чтобы можно было использовать эти функции надо подключить файл
Windows.bi , который связан с файлом, имеющим описание этих функций.
У этих функций один параметр: преобразуемая строка. Конечный результат находится
в этой же строке, что мы и выводим в наше окно сообщений. Я не стал использовать
в этом примере консоль, потому как вы помните, консоль не любит русских
символов, и искажает их. Но придет время и мы заставим консоль выводить родные
нам буковки, а статью о строках я завершаю. Напоследок хотелось бы сказать, что
есть в FreeBasic для строк функции начинающиеся с символа W. Так например
WSTR, WSPACE, WSTRING и другие. Используются они аналогично своим "собратьям"
STR , SPACE , STRING, но для кодировки Unicode.
Всего
доброго!
содержание | назад | вперед