5.2 Character Arrays

Last-modified: 2025-03-03 (月) 21:26:34

5.2 文字配列¶

Octave で使用される文字列表現は文字の配列であるため、内部的には文字列"dddddddddd"は実際にはすべての場所に値 100 を含む長さ 10 の行ベクトルです (100 は の ASCII コードです "d")。これは、文字マトリックスへの明らかな一般化に役立ちます。文字のマトリックスを使用すると、同じ長さの文字列のコレクションを 1 つの変数で表すことができます。Octave で使用される規則では、文字マトリックスの各行は個別の文字列ですが、各列に文字列を表すことも同様に可能です。

文字マトリックスを作成する最も簡単な方法は、複数の文字列をマトリックスにまとめることです。

collection = [ "String #1"; "String #2" ];

これにより、2 x 9 の文字マトリックスが作成されます。

この関数は、ischarオブジェクトが文字マトリックスであるかどうかをテストするために使用できます。

: tf = ischar (x)

xが文字配列の 場合は true を返します。

See also: isfloat, isinteger, islogical, isnumeric, isstring, iscellstr, isa.

: tf = isstring (s)

sが文字列配列の 場合は true を返します。

文字列配列は、配列の各要素に文字列(文字の行ベクトル)を格納するデータ型です。これは、各要素が単一の1x1文字であるN次元配列である文字配列とは異なります。また、各要素に文字列を格納する文字列のセル配列とも異なりますが、セルインデックスを使用します。{}' 通常の配列インデックスを使用する文字列配列ではなく要素にアクセスします '()'。

プログラミング ノート: Octave はまだ文字列配列を実装していないため、この関数は常に false を返します

See also: ischar, iscellstr, isfloat, isinteger, islogical, isnumeric, isa.

オブジェクトが文字列 (つまり、文字行列ではなく、文字の 1xN 行ベクトル) であるかどうかをテストするには、次の例のように、 ischar関数を関数と組み合わせて使用​​できます。isrow

ischar (collection)
    ⇒ 1
ischar (collection) && isrow (collection)
    ⇒ 0
ischar ("my string") && isrow ("my string")
    ⇒ 1

関連する質問の 1 つは、異なる長さの文字列から文字マトリックスが作成される場合に何が起こるかということです。その答えは、Octave は最長文字列よりも短い文字列の末尾に空白文字を配置するということです。関数を使用して、空白文字とは異なる文字を使用することもできますstring_fill_char。

: val = string_fill_char ()
: old_val = string_fill_char (new_val)
: old_val = string_fill_char (new_val, "local")

文字マトリックスのすべての行を同じ長さに埋め込むために使用される内部変数を照会または設定します。

値は 1 文字である必要があり、デフォルトは" "(1 つのスペース) です。例:

string_fill_char ("X");
[ "these"; "are"; "strings" ]
   ⇒  "theseXX"
       "areXXXX"
       "strings"

オプションを使用して関数内から呼び出されると"local"、関数とそれが呼び出すサブルーチンに対して変数がローカルに変更されます。関数を終了すると、元の変数値が復元されます。

この場合にテキストの位置合わせを制御するためのもう 1 つの便利な関数は、strjust関数です。

: str = strjust (s)
: str = strjust (s, pos)

pos(、、または) に従って位置揃えされたテキストsを返します。"left""center""right"

posが省略された場合は、デフォルトで になります"right"。

ヌル文字はスペースに置き換えられます。その他の文字データはすべて非空白として扱われます。

例:

strjust (["a"; "ab"; "abc"; "abcd"])
    ⇒
       "   a"
       "  ab"
       " abc"
       "abcd"

See also: deblank, strrep, strtrim, untabify.

これは、文字マトリックスの問題を示しています。異なる長さの文字列を表すことは不可能です。解決策は、文字列のセル配列を使用することです。これについては、「文字列のセル配列」で説明されています。