Иллюстрированный самоучитель по MatLab

Основные функции символьных данных

Функции обработки массивов символов или рядов этих массивов (строкой в терминологии 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
for
home
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 возможна, но не гарантируется для систем, не прошедших адаптацию под тот или иной язык. В частности, проблемы работы с символами кириллицы (например перевод строки при наборе малой буквы "с" в командной строке) уже обсуждались. Поэтому примеры в этой главе даны для строк с символами основной кодовой таблицы
.

Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.