Small Basic #11 Манипуляция с текстом

Что можно делать с текстом

В Small Basic, как и в других языках программирования, можно совершать различные операции: вырезать части, находить символы, склеивать и т.д.

Try It Out

1. Текст содержит символ

Для начала, научимся определять, содержит ли введённый пользователем текст определённые символы.
1.1. Попросим пользователя ввести текст и определить его тип: повествовательный (розповідне), вопросительный (питальне) или побудительный (спонукальне):
TextWindow.WriteLine("Пожалуйста, введите ваше предложение.")
sentence = TextWindow.Read()

1.2. Если во введённом тексте обнаружится знак вопроса, то вывести сообщение о том, что предложение вопросительное. Если восклицательный знак – побудительное. Во всех остальных случаях – повествовательное.
' Проверим, есть ли в предложении знак вопроса или восклицательный знак
If Text.IsSubText(sentence,"?") Then
  TextWindow.WriteLine("Ваше предложение вопросительное")
ElseIf Text.IsSubText(sentence,"!") Then
  TextWindow.WriteLine("Ваше предложение побудительное")  
' Если нет, то предложение повествовательное
Else
  TextWindow.WriteLine("Ваше предложение повествовательное")  
EndIf

1.3. Всё это обернём в бесконечный цикл.

2. Поиск в тексте месторасположения (индекса) символа

Иногда нам нужно не просто определить, содержит ли текст какие-то символы, а определить индекс этого символа(лов).
TextWindow.WriteLine("Пожалуйста, введите ваше предложение и я найду расположение запятой")
sentence = TextWindow.Read()
index = Text.GetIndexOf(sentence,",")
TextWindow.WriteLine(index)

3. Обрезка текста

Частая задача – порезать текст на кусочки по какому-либо критерию.
3.1. Добавим текст, добудем у него только первые 8 символов и запишем в новую переменную
sentence = TextWindow.Read()
sliced = Text.GetSubText(sentence ,1,8) ' 1 – начать с 1 символа, 8 – закончить на 8 символе
TextWindow.WriteLine(sliced)

3.2. Теперь от этой переменной добудем хвостик, начиная с 3 символа включительно и запишем новое значение в эту же переменную
sliced = Text.GetSubTextToEnd(sliced,3)

4. Поиск символа и разбивка текста по этому символу

Рассмотрим и такой пример: пользователь вводит координату в формате "x;y" и в этой координате отрисовывается эллипс случайного цвета.
4.1. Сначала зациклим этот процесс. Просим пользователя ввести координаты.
while "true" 
  TextWindow.WriteLine("Введите координаты в формате x;y")
  coords = TextWindow.Read()
EndWhile

4.2. Найдём индекс символа точки с запятой. Всё, что будет слева от неё – это х, всё, что справа – это у!
  index = Text.GetIndexOf(coords,";")
  x = Text.GetSubText(coords,1,index-1) 
  y = Text.GetSubTextToEnd(coords,index+1)

4.3. Отрисовываем эллипс в заданных координатах:
  GraphicsWindow.BrushColor = GraphicsWindow.GetRandomColor()
  ellipse = Shapes.AddEllipse(40,40)
  Shapes.Move(ellipse,x,y)

4.4. Ответьте, почему при обрезке текста мы брали index-1 и index+1?

В конспект

Проверка содержания символа
Text.IsSubText(sentence,"!") ' возвращает true, если в sentence обнаружится символ "!"

Поиск индекса символа в тексте
index = Text.GetIndexOf(text,subtext)

Обрезка текста от номера begin и до номера end
sliced = Text.GetSubText(text,begin,end)

Обрезка текста от begin до конца текста
sliced = Text.GetSubTextToEnd(text,begin)

Задачи

Задача 11.1*. Добавьте в код из 1 пункта Try It Out проверку и определение предложения на такие символы:
"..." – предложение задумчивое
"=(" – вам грустно
"=)" – вы улыбаетесь
"привет" – предложение с приветствием

Задача 11.2**. Посчитать количество букв "а" во введённом тексте

Задача 11.3**. Дополнить код из пункта 4 TryItOut ещё одним параметром: теперь пользователь не просто вводит две координаты но и диаметр эллипса в формате: "x;y;diameter"

Задача 11.4***. Разделить введённый текст по словам (используйте запятые как разделители), записав их в массив. Выведите этот массив в текстовое окно.
Текст: "Rammstein,Pink Floyd,Radiohead,Nightwish,Mistral,Portishead"

Задача 11.5**. Проверка текста на СПАМ. Проверьте, содержит ли введённая пользователем фраза такие слова как: "выплаты", "халява", "бесплатно". Чтобы облегчить проверку, введённый пользователем текст конвертируйте в нижний регистр – используйте метод Text.ConvertToLowerCase()
Потому что "Халява", "хАлЯвА" и "халява" – это разные величины.

Задача 11.6**. Имитация "Возможно вы имели в виду...". Пользователь вводит слово на русском языке но английскими буквами. Программа выводит правильное слово.
Пример:
Ввод: ghbdtn
Вывод: привет

Комментарии

Отправить комментарий