Найти тему
Работа, учёба и отдых

Работа с текстовой строкой в среде программирования PC WorX

В материалах, опубликованных ранее:

можно познакомиться с теоретической информацией и практическими работами, связанными с программированием на языке программирования Function Block Diagram в среде программирования PC WorX.

В текущем материале приведём варианты лабораторных работ для работы с текстовой строкой:

Определение. Последовательность символов алфавита, заключенная в кавычки, представляет собой символьную (текстовую) строку.

Замечание: Кавычки в текстовую строку не входят. Например, 'Это строка символов'. Первая кавычка указывает на начало строки, последняя – на ее окончание.

Функции для операций с символьными строками на языке Function Block Diagram представлены элементами CONCAT, DELETE, EQ_STRING NE_STRING GE_STRING, GT_STRING, LE_STRING, LT_STRING, FIND, INSERT, MID, REPLACE, LEFT, RIGHT и LEN, вид которых изображен на рисунке ниже:

Функциональные блоки для работы с текстовой (символьной) строкой
Функциональные блоки для работы с текстовой (символьной) строкой

Функция CONCAT объединяет на выходе OUT (тип данных STRING) две символьные строки путем добавления символьной строки на входе IN2 (тип данных STRING) в конец символьной строки на входе IN1 (тип данных STRING).

Функция DELETE. Эта функция удаляет из символьной строки IN (тип данных STRING) фрагмент с числом символов L (тип данных ANY_INT) начиная с позиции P (тип данных ANY_INT). Тип данных на выходе OUT – STRING. В случае неверного ввода данных результирующая переменная возвращает пустую строку, и программируемый логический контроллер выдает ошибку.

Функция EQ_STRING сравнивает символьную строку с входа IN1 (тип данных STRING) с символьной строкой с входа IN2 (тип данных STRING) и устанавливает на выходе OUT (тип данных BOOL) значение TRUE, если строки IN1 и IN2 равны, и значение FALSE, если не равны.

Функция NE_STRING сравнивает символьную строку с входа IN1 (тип данных STRING) с символьной строкой с входа IN2 (тип данных STRING) и устанавливает на выходе OUT (тип данных BOOL) значение TRUE, если строки IN1 и IN2 не равны, и значение FALSE, если они равны.

Функция GE_STRING сравнивает символьную строку с входа IN1 (тип данных STRING) с символьной строкой с входа IN2 (тип данных STRING) и устанавливает на выходе OUT (тип данных BOOL) значение TRUE, если строка IN1 больше или равна строке IN2, в противном случае устанавливается значение FALSE.

Функция GT_STRING сравнивает символьную строку с входа IN1 (тип данных STRING) с символьной строкой с входа IN2 (тип данных STRING) и устанавливает на выходе OUT (тип данных BOOL) значение TRUE, если строка IN1 больше строки IN2, в противном случае устанавливается значение FALSE.

Функция LE_STRING сравнивает символьную строку с входа IN1 (тип данных STRING) с символьной строкой с входа IN2 (тип данных STRING) и устанавливает на выходе OUT (тип данных BOOL) значение TRUE, если строка IN1 меньше или равна строке IN2, в противном случае устанавливается значение FALSE.

Функция LT_STRING сравнивает символьную строку с входа IN1 (тип данных STRING) с символьной строкой с входа IN2 (тип данных STRING) и устанавливает на выходе OUT (тип данных BOOL) значение TRUE, если строка IN1 меньше строки IN2, в противном случае устанавливается значение FALSE.

Для функций GE_STRING, GT_STRING, LE_STRINGи LT_STRING необходимо помнить, что сравнение осуществляется слева направо. Символ 'Z' больше, чем символ 'A', поэтому строка 'Z' больше, чем строка 'AZ' и 'AZ' больше строки 'ABC'. При сравнении двух строк разной длины, более короткая строка должна быть продлена справа до величины более длинной строки символами с нулевым значением. Выход OUT можно инвертировать.

Функция FIND определяет положение строки на входе IN2 (тип данных STRING) в строке на входе IN1. Позиция символа первого вхождения строки на входе IN2 в строку IN1 передается на выход OUT (тип данных INT). Если совпадений не найдено, то выход OUT = 0.

Функция INSERT. Эта функция символьной строки вставляет строку с входа IN2 (тип данных STRING) в строку на входе IN1 (тип данных STRING) после символа на позиции P (тип данных INT).

Функция MID извлекает фрагмент символьной строки, поданной на вход IN (тип данных STRING), начиная с позиции P (тип данных ANY_INT). Число извлекаемых символов определяется переменной L (тип данных ANY_INT).

Функция REPLACE заменяет фрагмент символьной строки с входа IN1 на строку с входа IN2, начиная с позиции P (тип данных ANY_INT). Число символов, которые будут заменены, определяется переменной L (тип данных ANY_INT).

Необходимо понимать, что для функций INSERT, MID и REPLACE значение переменной на входе Р не может быть равно 0. Первая позиция в строке представляет собой всегда 1. Также невозможно использовать одну и ту же строку в качестве входной и выходной строки. В этом случае следует использовать промежуточную переменную на выходе, которой затем назначается значение входной переменной. Если требуется вставить строку одну перед другой, следует использовать не функцию INSERT, а функцию CONCAT.

Функция LEFT извлекает L левых символов строки с входа IN. Тип данных для входа IN и выхода OUT – STRING, для входа L ­- ANY_INT.

Функция RIGHT извлекает справа L символов строки с входа IN. Тип данных для входа IN и выхода OUT – STRING, для входа L ­- ANY_INT.

Функция LEN определяет длину символьной строки. Тип данных для входа IN – STRING, для выхода OUT ­- INT.

Лабораторная работа 1 «Проверка текстовых (символьных) строк на логическое условие».

Проверьте символьную строку на условие, заданное в таблице 1 (см. ниже). Результат проверки представьте в виде логически обоснованной символьной строки.

Варианты для самостоятельного выполнения
Варианты для самостоятельного выполнения

Пример выполнения лабораторной работы 1.

Рассмотрим пример решения для варианта № 30. По условию задачи текстовая строка проверяется на наличие латинских символов 'A', 'B' и 'C'.

Для проверки каждого условия воспользуемся функцией FIND, для которой по первому входу будем вводить исследуемую текстовую строку, а по второму – условия совпадения. При совпадении символов на выходе функции FIND появляется число символов в формате ANY_INT. Для организации перехода по условию воспользуемся блоком SEL, как показано на рисунке ниже. Для согласования типов данных применим функцию преобразования типов INT_TO_BOOL, выдающую значение TRUE при любом INT, не равном нулю.

Пример выполнения лабораторной работы 1.
Пример выполнения лабораторной работы 1.

Лабораторная работа 2 «Сложные условия для символьных строк».

Для текстовой строки, состоящей из полного имени, отчества и фамилии, необходимо получить текстовую строку, которая должна быть в виде Фамилия И.О. (например, символьная строка 'Виктор Николаевич Семенов' должна преобразоваться в символьную строку 'Семенов В.Н.').

Пример выполнения лабораторной работы 2.

Рассмотрим пример выполнения лабораторной работы 2. Согласно заданию, последовательность написания имени, отчества и фамилии жёстко задана, и по умолчанию они разделены пустой строкой (пробелом). Поэтому логика преобразований строится следующим образом:

1. Для преобразования «Имя Отчество Фамилия» в «И.Отчество Фамилия» находим первую пустую строку, что дает возможность подсчитать число букв в имени (Функция FIND в линии с маркером 1). Удалим лишние буквы, заменив их одной точкой (Функция REPLACE в линии с маркером 1, см. рис. ниже).

2. Аналогичным образом преобразуем полученный результат в «И.О.Фамилия» (элементы в линии, отмеченной маркером 2).

3. Далее по заданию требуется поменять местами строки «И.О.» и «Фамилия» и отделить их пробелом. Для этого предварительно определяем число символов в фамилии (число символов в строке «И.О.» известно), затем функциями LEFT и RIGHT разделяем символьную строку на две.

4. Функцией CONCAT сливаем строки в обратном порядке и дополняем пробелом при помощи функции INSERT (линия маркера 3).

Реализация программы на языке программирования Function Block Diagram в среде программирования PC WorX показана на рисунке ниже.

Пример выполнения лабораторной работы 2.
Пример выполнения лабораторной работы 2.

В качестве дополнительного Упражнения предлагается написать программу в среде программирования PC WorX, которая для текстовой строки (если не указано условие на символьную строку, то она считается произвольной, состоящей из латинских букв с допущением пробелов) воспроизводит текстовую строку, удовлетворяющую одному из условий, представленных ниже. Результат в режиме отладки в виде скрина приведите в виде комментария. Также укажите, какое именно условие выбрано для реализации программы.

Перечень вариантов условий для Упражнения:

1) в конце текстовой строки стоит символ a;

2) в начале текстовой строки стоит символ a;

3) в текстовой строке замените все символосочетания «qu» на «ququrequ»;

4) в текстовой строке каждое слово имеет нечётное число символов;

5) в текстовой строке каждое слово имеет чётное число символов;

6) в текстовой строке слова располагаются по возрастанию числа символов в словах;

7) все символы a и b заменяются на c и dсоответственно;

8) запрещено символосочетание let;

9) запрещено символосочетание at;

10) из текстовой строки удалите все символы, которые являются; одной из четырёх первых букв латинского алфавита;

11) из текстовой строки удалите первый символ каждого слова;

12) из текстовой строки удалите среднюю букву, если длина слова нечетная;

13) из текстовой строки удалите все пробелы;

14) каждый гласный символ удваивается;

15) каждый согласный символ от b до m удваивается;

16) каждый согласный символ от n до z удваивается;

17) между символами a стоит блок из четырёх символов;

18) на 2 месте в текстовой строке стоит символ a;

19) не больше одной пары одинаковых символов стоят рядом;

20) не встречается символосочетание ab;

21) одинаковые символы не идут друг за другом;

22) производится подсчёт гласных символов;

23) производится подсчёт случаев, когда символ слева меньше символа, стоящего справа;

24) производится подсчёт случаев, когда символ справа меньше символа, стоящего слева;

25) производится подсчёт согласных символов от b до m;

26) производится подсчёт согласных символов от n до z;

27) символ dидёт непосредственно перед a;

28) символы a и b не стоят рядом и разделяются символами out;

29) символы oo не стоят рядом;

30) слова символьной строки, начинающиеся с гласного символа, размещаются в лексикографическом порядке.