Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
sergiy
6 лет назад

03 FreeBASIC. Текстовые переменные и операции с ними

Если операции с числами знакомы нам с детства, то операции с текстовыми строками это что-то новенькое. Есть у нас например текстовая переменная A$(или несколько A$, B$, C$ ...) что вообще с ними можно делать?

Функции и операции со строками не появились ведь просто так))) Программисты решая разные задачи прибегали к решению более мелких задач, порой одинаковых. И для облегчения себе жизни придумали такие вот функции для Бейсика. Есть они и в других языках и даже их там стало больше. Рассмотрим основные.

Функция LEN(A$)

Например очень часто нужно узнать длину текстовой переменной(длину строки) для этого есть функция.
Код print len(a$) выведет на экран длину(количество символов) текстовой переменной a$. Длина - это количество памяти(байт) которые отведены под переменную(строку). Символы пробел, точка, запятая, и т.д. ведь тоже занимают место, а следовательно так же идут в счёт. Название функции произошло от английского слова length - длина, и во многих других языках Паскаль, С/С++ она носит полное имя, в Бейсике же ограничились более коротким - len.

Объединение строк

Если мы напишем так C$=A$+B$? что произойдёт? Строки соединятся - к строке A$ допишется(прибавится) значение переменной B$ и результат поместится в переменную C$
A$="Free"
B$="BASIC"
C$=A$+B$
print C$

не забываем просить FreeBASIC работать в режиме QuickBasic #lang "qb" в начале программы

Или же пытаемся жить по новому и объявляем переменные и их тип в начале программы
Dim As String a, b, c, но тогда прийдется поубирать суффиксы $с переменных A$, B$, C$

Как думаете что выведет оператор print в этой программе?
A$="12"
B$="1"
C$=A$+B$
print C$

13? )) Напомню, что в строковых переменных хранятся символы, не числа.

VAL(A$) и STR$(k) преобразование строки в число и числа в строку

А если надо узнать какое же число хранится в строковой переменной, если оно там хранится?
Для этого есть оператор val который при использовании с переменной A$ вернет её значение.
В последнем примере print val(A$) выдаст 12, и 12 здесь уже будет число. Ну вернее говоря print val(A$) выдаст на экран всё таки текст, а вот получит от val число. Можно использовать например так: p=val(A$), p здесь числовая переменная и она будет равна 12.

Есть функция и обратная к функции Val - это функция str$, которая из числа может сделать строку.
Используют так: k$=str$(34+5), в результате в переменную k$ будет занесён текст "39"

Говорить что при A$="12" в память компьютера запишутся символы 1 и 2 не совсем верно. На самом деле в память запишутся числа 49 и 50. Если взять и "залезть" в память компьютера, именно в те ячейки памяти где хранится переменная A$, а такие средства есть, и они используются для отладки программы. Отладка - это поиск ошибок в программе, когда программа не работает, или работает, но не так как нужно. В первом случае программа выдаст ошибку и не запустится - это синтаксическая ошибка, во втором - логическая, т.е. с точки зрения Бейсика программа составлена верно, запустилась и работает, но работает она не так как нужно.

Так вот, в памяти мы увидим 49 и 50, а не 1 и 2. Это потому что в память записываются коды символов "1" это 49 и "2" это 50. Я помню, что код символа "А" например 65, а код "Z" - 90, для "a" это 97, .... Эти коды я не заучивал, это и не нужно - они есть в специальной таблице, они просто сами запомнились, от частого использования в своё время.
А всё потому что компьютер работает с цифрами и на языке цифр ему проще объяснить что и как делать. На первом примере использования этих функций в программе вы увидите - так удобней и программисту, а не только компьютеру)))

Функции Asc(символ) и Chr$(число)

Asc(символ) дает код символа из таблицы символов, а Chr$(число) наоборот - даёт символ с определённым кодом.
print chr$(50) выдаст "2",
а
print chr$(49) выдаст "1",
ну а раз строки можно объединять, то
print chr$(49)+chr$(50) выдаст "12"

Аналогично
print asc("%") выдаст код символа процент("%") - 37.

Функции LEFT$, RIGHT$, MID$ и функция поиска INSTR

LEFT$(a$, n) - возвращает n левых символов от строки a$
RIGHT$(a$, n) - возвращает n правых символов от строки a$
MID$(a$, n, k) - возвращает k символов от строки a$ начиная с позиции n

например b$="12345"
тогда LEFT$(b$, 2) выдаст "12", RIGHT$(b$, 4) выдаст "2345", а MID$(b$, 3, 1) выдаст "3"

MID$(a$, n, k) это не только функция(которая возвращает значение), но это ещё и оператор, который что-то делает.

Код MID$(b$, 3, 1)="0" изменит строку b$
Всё зависит от того, с какой стороны от знака равенства стоит MID$

instr(a$,5,3,"Do") ищет в строке a$ третье вхождение подстроки "Do" и возвращает его найденную позицию.

Ещё некоторые функции для работы со строками

ФункцияДействие
LCase(строка)переводит строку в нижний регистр
UCase(строка)переводит строку в верхний регистр
LTrim(строка)возвращает строку состоящую из исходной, но без пробелов слева
RTrim(строка)возвращает строку состоящую из исходной, но без пробелов справа
Trim(строка)возвращает строку состоящую из исходной, но без пробелов справа и слева
Space(k)возвращает строку состоящую из k пробелов
String(k, c)возвращает строку состоящую из k символов с кодом c

Функции семейства trim могут вырезать не только пробелы, но и целые наборы символов(подстроки). Более подробно можно почитать о них здесь

Таблица называется ASCII (American standard code for information interchange) американский стандартный код для обмена информацией.

Каждому числу от 0 до 255 соответствует свой символ печатный, или не печатный(управляющий). Управляющий это для принтеров и прочих печатных устройств. А где же русские, вернее кириллические, символы? Вторая часть таблицы особым программным образом переключалась на символы национальных алфавитов и тогда появлялись "наши" буковки. Но беда в том, что таких таблиц для русских букв было как минимум две и иногда вместо букв выскакивала непонятная кашица из символов. А потом появилась ещё и Windows там ещё было с таблицей по другому.

Первая часть коды до 127

вторая часть коды от128

Есть в этой таблице и специальные символы - сердечки, карточные масти и символы псевдографики, для рисования таблиц на экране (коды 179-218) Сначала ведь не было графики на экране, экран мог только отображать символы - A,B,... А это такие же символы, и с помощью их "рисовалась", ой, простите, печаталась таблица на экране.

Заметили что в некоторых функциях есть суффикс $, а в некоторых нет? Если есть значит функция возвращает строку? например chr$(179), если нет - значит возвращает число, например val("45") будет 45.

рассмотрены текстовые функции: len, val, str, asc, chr, right, mid, instr, lcase, ucase, ltrim, utrim, trim, space, string.

0. FreeBASIC лучший из диалектов бейсика
1. Начинаем изучать FreeBasic
2. [FreeBASIC] Переменные в Бейсике

@sergiy

16
437.602 GOLOS
На Golos с October 2016
Комментарии (5)
Сортировать по:
Сначала старые