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