asciimat Преобразует массив текста в коды ASCII/UTF8 и обратно

## Синтаксис

                unicodes = asciimat(text)
                text = asciimat(unicodes)

## Аргументы

text
  отдельный текст, или вектор, матрица или гиперматрица текстов. Элементы текста могут иметь разную длину и могут включать в себя расширенные символы UTF-8.

  `asciimat(…)` всегда конкатенирует столбцы текста `text` вдоль строк, как входной или выходной аргумент.

unicodes
  отдельный целочисленный ASCII-код, вектор, матрица или гиперматрица 1-байтных чисел ASCII или юникода.

## Описание

`asciimat(…)` преобразует массив текста `text` в массив соответствующих 1-байтных кодов ascii или UTF-8 `unicodes`, и наоборот.

`asciimat(…)` является функцией совместимости с Octave/Matlab, с целью обеспечить в преобразователе кода Matlab-в-Scilab m2sci эквивалентность для суммирования и вычитания некоторых строковых символов или с числами. Таким образом,

    >> ['ab' 'c' ; 'd' 'ef'] + 4
    ans =
       101   102   103
       104   105   106

    >> ['ab';'cd'] + ['ef';'gh']
    ans =
       198   200
       202   204

    >> ['ab';'cd'] - ['ef';'gh']
    ans =
      -4  -4
      -4  -4

может быть преобразовано преобразователем Matlab-в-Scilab с

    asciimat(['ab' 'c' ; 'd' 'ef']) + 4
    asciimat(['ab';'cd']) + asciimat(['ef';'gh'])
    asciimat(['ab';'cd']) - asciimat(['ef';'gh'])

`asciimat(…)` не следует использовать без преобразователя.

### unicodes = asciimat(text)

Для скаляра или строки `text`, `asciimat(text)` эквивалентно `ascii(text)`. Все строчки склеиваются друг с другом перед построением вектора-строки кодов их символов.

Для любого массива `text` любых размеров, сделанных только из пустых строк `""`, `asciimat(text)` возвращает `[]`. Действительно, `asciimat(…)` считает `""` как пустой вектор (индексированных) символов как в Octave/Matlab, а не как текстовый объект Scilab.

Для двумерных матриц `text`, `asciimat(text)` строит уникальный столбец текста, склеивая столбцы `text` вдоль строк.

Затем для каждой строки/строчки столбца вычисляется вектор-строка кодов ASCII или UTF-8 всех её символов.

Наконец, все результирующие вектор-строки кодов конкатенируются по вертикали для построения матрицы `unicodes`. Слишком короткие векторы кодов предварительно дополняются кодом ascii(" ")==32.

Для гиперматрицы `text`, обработка, в основном, та же самая, как если бы все строки `text` по всем размерностям больше двух были предварительно составлены в двумерную матрицу. Результирующая двумерная матрица `unicodes`, наконец, преобразуется в гиперматрицу.

Размеры массивов `unicodes` и `text` отличаются только по количеству их столбцов.

### text = asciimat(unicodes)

Для скаляра или строки `unicodes`, `asciimat(unicodes)` эквивалентна `ascii(unicodes)`. Она возвращает символьные строки, чьи символы имеют указанные коды.

Нули стоят для кода пустого символа `""`, поскольку настоящий символ `ascii(0)` пока что не поддерживается в Scilab 6.

Для столбца, матрицы или гиперматрицы `unicodes`, каждая строка `unicodes` обрабатывается отдельно и строит отдельную символьную строку Scilab.

Все завершающие пробелы `ascii(32)` построенных символьных строк отсекаются.

Наконец, `text` имеет размер `unicodes`, за исключением `size(text,2)==1`.

## Примеры

    asciimat([])
    asciimat("")
    asciimat(0)

    r = asciimat("A")
    asciimat(r)

    // Со СТРОКОЙ на входе:
    r = asciimat(["A" "BC"])
    asciimat(r)

    r = asciimat(["A" "" "BC"])      // "" в строках игнорируются
    asciimat(r)

    --> asciimat([])
     ans  =
        []
    --> asciimat("")
     ans  =
        []
    --> asciimat(0)
     ans  =
      ""

    --> r = asciimat("A")
     r  =
       65.
    --> asciimat(r)
     ans  =
      "A"

    --> // With an input ROW:
    --> r = asciimat(["A" "BC"])
     r  =
       65.   66.   67.

    --> asciimat(r)
     ans  =
      "ABC"

    --> r = asciimat(["A" "" "BC"])      // "" in rows are ignored
     r  =
       65.   66.   67.

    --> asciimat(r)
     ans  =
      "ABC"

Со столбцом на входе:

    asciimat(["" ; ""])
    asciimat((97:110)')'
    strsplit("a":"n")'

    r = asciimat(["ABC" ; "" ; "D"]) // Дополнение коротких строк с помощью 32
    asciimat(r)
    r = asciimat(["AB" ; "αβ"])      // используется 1-байтный код UTF-8
    asciimat(r)                      // завершающие пробелы ascii(32) отсекаются

    --> asciimat(["" ; ""])
     ans  =
        []

    --> asciimat((97:110)')'
     ans  =
      "a"  "b"  "c"  "d"  "e"  "f"  "g"  "h"  "i"  "j"  "k"  "l"  "m"  "n"

    --> strsplit("a":"n")'
     ans  =
      "a"  "b"  "c"  "d"  "e"  "f"  "g"  "h"  "i"  "j"  "k"  "l"  "m"  "n"

    --> r = asciimat(["ABC" ; "" ; "D"]) // Padding short rows with 32
     r  =
       65.   66.   67.
       32.   32.   32.
       68.   32.   32.

    --> asciimat(r)
     ans  =
      "ABC"
      ""
      "D"

    --> r = asciimat(["AB" ; "αβ"])      // 1-byte UTF-8 coding is used
     r  =
       65.    66.    32.    32.
       206.   177.   206.   178.

    --> asciimat(r)                      // Trailing ascii(32) spaces are trimmed
     ans  =
      "AB"
      "αβ"

С двумерной матрицей на входе:

    r = asciimat([" AB", " ", "CD " ; "α", "βγ", " "])
    asciimat(r)

    --> r = asciimat([" AB", " ", "CD " ; "α", "βγ", " "])
     r  =
       32.    65.    66.    32.    67.    68.    32.
       206.   177.   206.   178.   206.   179.   32.

    --> asciimat(r)
     ans  =
      " AB CD"
      "αβγ"

С трёхмерной гиперматрицей на входе:

    x = ["a €" "bδ " ; "" "" ;  "" "" ];
    x2 = [" α" "βδc" ; "" "" ; "ε4" ""];
    h = cat(3, x, x2)
    r = asciimat(h)
    asciimat(r)

    --> h = cat(3, x, x2)
     h  =
    (:,:,1)
      "a €"  "bδ "
      ""     ""
      ""     ""
    (:,:,2)
      " α"  "βδc"
      ""    ""
      "ε4"  ""

    --> r = asciimat(h)
     r  =
    (:,:,1)
       97.   32.   226.   130.   172.   98.   206.   180.   32.
       32.   32.   32.    32.    32.    32.   32.    32.    32.
       32.   32.   32.    32.    32.    32.   32.    32.    32.
    (:,:,2)
       32.    206.   177.   206.   178.   206.   180.   99.   32.
       32.    32.    32.    32.    32.    32.    32.    32.   32.
       206.   181.   52.    32.    32.    32.    32.    32.   32.

    --> asciimat(r)
     ans  =
    (:,:,1)
      "a €bδ"
      ""
      ""
    (:,:,2)
      " αβδc"
      ""
      "ε4"

## Смотрите также

- ascii
- char

## История

6.1.1

- Принимаются текстовые компоненты различной длины или/и включая символы UTF-8. Реализовано дополнение кодами ascii(" ")==32.
- asciimat(unicodes) отсекает все завершающие пробелы.
- Для любых гиперматрицы unicodes, r = asciimat(unicodes) больше не сжимает size(r,2).