Основные функции символьных данных
Функции обработки массивов символов или рядов этих массивов (строкой в терминологии MATLAB называется любой массив символов или ряд массива символов) для математической системы могут показаться второстепенными. Однако это не так. Строковое представление данных лежит в основе символьной математики, арифметики произвольной точности и многочисленных программных конструкций, не говоря уже о том, что оно широко применяется в базах данных и массивах ячеек. Этот урок посвящен возможностям обработки символьных переменных и выражений в системе MATLAB.
В основе представления символов в строках лежит их кодирование с помощью сменных таблиц кодов. Такие таблицы ставят в однозначное соответствие каждому символу некоторый код со значением от 0 до 255.
Вектор, содержащий строку символов, в системе MATLAB задается следующим образом:
- S= 'Any Characters' – вектор, компонентами которого являются числовые коды, соответствующие символам [Символ внутри такой строки дублируется (заменяется на ''). – Примеч. ред.].
Первые 127 чисел – это коды ASCII, представляющие буквы латинского языка, цифры и спецзнаки. Они образуют основную таблицу кодов. Вторая таблица (коды от 128 до 255) является дополнительной и может использоваться для представления символов других языков, например русского. Длина вектора S соответствует числу символов в строке, включая пробелы. Апостроф внутри строки символов должен вводиться как два апострофа ' '.
К основным строковым функциям относятся следующие:
- char (X) – преобразует массив X положительных целых чисел (числовых кодов от 0 до 65 535) в массив символов системы MATLAB (причем только первые 127 кодов – английский набор ASCII, со 128 до 255 – расширенный набор ASCII) и возвращает его, на платформе Windows при значении выше 65 535 выдает предупреждение об ошибке, но возвращает русскую букву я (я повторяется так же, как char(255+256rt), где п – целые неотрицательные числа) [Результат char(x) при х>65535 зависит от платформы, русификации и т. д. – Примеч. ред.];
Пример:
>> X=reshape(32:127.32.3); >> S= char(X) S=!"#$*&`()*+.-./0123456789::< ›? (aABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_ abcdefghijklmnopqrstuvwxyz{|}-[] >> t1= 'computer'>> t2='for'; >> t3='home': >> t4='users': >> S = Char(tl.t2.t3.t4) S =computer forhome users- char (С) – преобразует каждый элемент строкового массива ячеек в ряды массива символов, если строки массива ячеек разного размера, к ним в конце добавляются пробелы (осуществляется набивка (padding) в терминах MATLAB) так чтобы в каждом ряде массива символов было одинаковое число символов;
- char (T1, T2, Т3), где Т – строки, возвращает массив символов, при этом копии строк T1, T2, Т3 преобразуются в ряды массива символов добавлением при необходимости пробелов в конце рядов массивов символов, как описано ранее;
- char (java.Tang.string) – преобразует объект класса java.lang .string вмассив символов MATLAB;
- char (javaarray of java.lang.string) – единственный случай, когда выходным аргументом функции является не массив символов, а строковый массив ячеек, в который преобразуется массив строк Java;
- double(S) – преобразует символы строки S в числовые коды 0-65535 и возвращает вектор с этими числовыми кодами;
- ischar (S) – возвращает логическую единицу, если S является символьной переменной, и логический ноль в противном случае;
- deblank(str) – возвращает строку, полученную из аргумента – строки str с удаленными из ее конца пробелами;
- deblank(c) – применяет функцию deblank к каждому элементу строкового массива ячеек с.
Примеры:
>> S = 'computer'S =computer >> X = double(S) X =99 111 109 112 117 116 101 114>> ischar(S) ans =1>> c{1,1}='My '; >> c{1,2}='home '; >> c{1,3}='computer '; >> c c='My ' 'home ' 'computer >> c = deblank(c) c = 'My' 'home' 'computer'Примечание
Правильная работа строковых функций с дополнительной кодовой таблицей ASCII возможна, но не гарантируется для систем, не прошедших адаптацию под тот или иной язык. В частности, проблемы работы с символами кириллицы (например перевод строки при наборе малой буквы "с" в командной строке) уже обсуждались. Поэтому примеры в этой главе даны для строк с символами основной кодовой таблицы.
