Работа со строками

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

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. 
 
Всего доброго!

содержание | назад | вперед