GNU Octave 2.1.x 日本語マニュアル/文字列

出典: フリー教科書『ウィキブックス(Wikibooks)』

5 文字列[編集]

文字列定数とは,ダブルクオートまたはシングルクオート文字のいずれかでくくられた文字の並びから構成されます。たとえば,以下の式は,

"parrot"
'parrot'
‘parrot’

を含む文字列です。Octaveにおける文字列は,任意の長さをとることができます。シングルクオート文字は,行列の転置演算子にも使用されます(Section 10.3 [ArithmeticOps]を参照)。しかし,ダブルクオート記号は,Octave では他の用途に使用されていません。ですから,文字列を表すには,ダブルクオートを使用することが最善です。いくつかの文字は,文字列定数にはそのまま含めることはできません。これらの文字は,エスケープシーケンスで表してください。エスケープシーケンスは,バックスラッシュ(‘\’;日本語環境では円記号)で始まる文字です。エスケープシーケンスのひとつの利用法は,文字列にダブルクオート(あるいはシングルクオート)文字そのものを含めることです。素のダブルクオート記号は文字列の終端となるので,単一のダブルクオート文字を表すには,文字列の一部として‘\"’ を使わなければなりません。バックスラッシュ(日本語では円記号)そのものも,ふつうでは含めることができない文字です。ですから,2 つの連続する文字列‘"\’は,"\"\\"あるいは'"\\'と表記することになります。同様に,2 つの文字‘'\’を含む文字列は,'\'\\' あるいは"'\\"と表記することになるでしょう。バックスラッシュのもう一つの利用法は,改行などの非印刷記号を表すことです。一方で,これらの記号の多くを文字列定数に直接書き込むと,見た目が汚くなります。それを避けることはできま せん。

Octave で使用されるすべてのエスケープシーケンスを,以下の表に示します。これらは,C言語で使用されているものと同じものです。

\\ バックスラッシュ文字‘\’ そのものを表します。
\" ダブルクオート文字‘"’ そのものを表します。\' シングルクオート文字‘'’ そのものを表します。
\0 ASCII コード0 の“null”(control-@)を表します。
\a ASCII コード7 の“警告音”(control-g)を表します。
\b ASCII コード8 の後退(control-h)を表します。
\f ASCII コード12 の復帰(control-l)を表します。
\n ASCII コード10 の改行(control-j)を表します。
\r ASCII コード13 のキャリッジリターン(control-m)を表します。
\t ASCII コード9 の水平タブ(control-i)を表します。
\v ASCII コード11 の垂直タブ(control-k)を表します。

複数の文字列は,行列を定義する表記を用いて,連結することができます。たとえば,以下の式は,

[ "foo" , "bar" , "baz" ]
‘foobarbaz’

を含む文字列を生成します。行列を作ることについて,さらなる情報はChapter 4[Numeric Data Types]を参照してください。

5.1 文字列の作成[編集]

blanks (n)[編集]

                                                               [Function File]

n 個の空白からなる文字列を返します。

char (x)[編集]

char (cell_array)[編集]

char (s1, s2, . . . )[編集]

                                                               [Function File]

数値行列,セル配列あるいは数値リストから文字列配列を作る。もし引数が数値行列であれば,その行列の各要素を対応するASCII 文字に変換します。例を以下に挙げる。

char ([97, 98, 99])
⇒ "abc"

もし引数が文字列のセル配列であれば,その結果は各要素がセル配列のひとつに対応するような文字配列となります。複数の文字列を引数とした場合は,その結果は,引数に対応する各要素をもつ文字列配列となります。返される値は,文字列配列の各行が同じ長さとなるように,空白がつめられています。

int2str (n)[編集]

num2str (x, precision)[編集]

num2str (x, format)[編集]

                                                               [Function File]

数値を文字列に変換します。これらの関数は,それほど柔軟性はありませんが,Matlab の互換性のために用意してあります。 結果をもっとよく操作するには,sprintf (Section 16.2.4 [FormattedOutput]を参照)を使用してください。

com2str (zz, flg)[編集]

                                                               [Function File]

この関数は,使用しないほうがよいでしょう。かわりにnum2str 関数を使用してください。複素数を文字列に変換します。

Inputs
zz 複素数値
flg 書式フラグ0
(標準状態)
 : -1, 0, 1, 1i, 1 + 0.5i 1
(zpout を使用する)
 : -1, 0, + 1, + 1i, + 1 + 0.5i

strcat (s1, s2, . . . )[編集]

                                                               [Function File]

すべての引数を連結した文字列を返します。以下に例を示します。

s = [ "ab"; "cde" ];
strcat (s, s, s)
⇒ "ab ab ab "
"cdecdecde"

string_fill_char[編集]

                                                           [Built-in Variable]

この変数の値は,文字列行列の全ての文字列を同じ長さにするために,詰め物として使用されます。これは,単一の文字にすべきです。標準状態の値は," "(単一のスペース文字)です。 以下の例を参照してください。

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

str2mat (s_1, . . . , s_n)[編集]

                                                           [Function File]

文字列s 1, . . . , s n を行に含む行列を返します。各々の文字列は,妥当な行列を作るため,空白文字で同じ長さにそろえられます。 この関数は,Matlab を参考にして作成されました。 Octave では,全ての文字列が同じ長さでなくとも,[s_1; ...; s_n]とすることにより,文字列の行列を作ることができます。

ischar (a)[編集]

                                                           [Built-in Function]

a が文字列ならば1,そうでなければ0 を返します。

isstr (a)[編集]

                                                           [Function File]

この関数は,使用しない方がよいでしょう。かわりにischar を使用してください。

5.2 検索と置換[編集]

deblank (s)[編集]

                                                           [Function File]

文字列s から,連続する空白やnull を取り除きます。 もしs が行列ならば,deblank は各々の行を,最長の文字列の長さに調整します。

findstr (s, t, overlap)[編集]

                                                           [Function File]

ふたつの文字列sとtの短い方が,長い方に現れる位置を含むベクトルを返します。 もしオプション引数overlap がゼロでなければ,返されるベクトルには,重なりあう位置を含みます(標準状態では,この動作をします)。 以下の例を参照してください。

findstr ("ababab", "a")
⇒ [ 1, 3, 5 ]
findstr ("abababa", "aba", 0)
⇒ [ 1, 5 ]

この実装は,2番目の引数が最初の引数よりも長いならば,文字列を入れ替えます。 したがって,長い方の文字列を最初に与えるようにしたほうがよいでしょう。

index (s, t)[編集]

                                                           [Function File] 文字列sの中に,文字列tが最初に現れる位置を返します。もし見つからなければ,0を返します。以下に例を示します。

index ("Teststring", "t")
⇒ 4

注意:この関数は,文字列配列には動作しません。

rindex (s, t)[編集]

                                                           [Function File]

文字列sの中に,文字列tが最後に現れる位置を返します。もし見つからなければ,0を返します。以下に例を示します。

rindex ("Teststring", "t")
⇒ 6

注意:この関数は,文字列配列には動作しません。

split (s, t)[編集]

                                                           [Function File]

文字列s を,t で区切って小片に分割し,文字列配列(妥当な行列になるように空白文字で詰め物をする)として返します。以下に例を示します。

split ("Test string", "t")
⇒ "Tes "
" s "
"ring"

strcmp (s1, s2)[編集]

                                                           [Function File] ふたつの文字列を比較し,両者が同じならば真値を,そうでなければ偽値を返します。 注意:Matlab との互換性を保つため,Octave のstrcmp 関数は,文字列が等しいならば真値を,そうでなければ偽値を返します。 これは,C 言語の同名のライブラリ関数とは逆の動作です。

strrep (s, x, y)[編集]

                                                           [Function File] 文字列s内に現れる部分文字列xのすべてをyで置き換えます。以下に例を示します。

strrep ("This is a test string", "is", "&%$")
⇒ "Th&%$ &%$ a test string"

substr (s, beg, len)[編集]

                                                           [Function File] 文字列sの,beg文字目からlen文字ぶんの長さを抜き出した部分文字列を返します。 もしbeg が負値ならば,文字列の末端から開始します。もしlen を省略するならば,s の末端までの部分文字列を返します。 以下に例を示します。

substr ("This is a test string", 6, 9)
⇒ "is a test"

この関数は,AWKを模倣したものです。 式s (beg : (beg + len - 1))と同じ結果が得られます。

5.3 文字列の変換[編集]

hex2dec (s)[編集]

                                                           [Function File]

文字列sに格納された2進数に対応する,10進の数値を返します。以下に例を示します。

hex2dec ("1110")
⇒ 14

もしs が文字列行列であれば,s の各行ごとに,変換した数値の列ベクトルを返します。 変換できない行は,NaN とします。

dec2bin (n, len)[編集]

                                                           [Function File]

非負の10 進数値n に対応する2 進数を,1 と0 の文字列として返します。以下に例を示します。

dec2bin (14)
⇒ "1110"

もしn がベクトルならば,値あたり1 行として,最も長い値の幅にあわせてゼロを詰めた文字列行列を返します。 2 番目の引数len はオプションであり,結果の最小桁数を指定します。

dec2hex (n, len)[編集]

                                                           [Function File] 非負の整数n に対応する16 進文字列を返します。以下に例を示します。

dec2hex (2748)
⇒ "ABC"

もしn がベクトルならば,値あたり1行として,最も長い値の幅にあわせてゼロを詰めた文字列行列を返します。 2番目の引数len はオプションであり,結果の最小桁数を指定します。

hex2dec (s)[編集]

                                                           [Function File]

16 進文字列 s に対応する非負の整数 n を返します。以下に例を示します。

hex2dec ("12B")
⇒ 299
hex2dec ("12b")
⇒ 299

もし s が文字列行列ならば,s の行ごとに,変換された数値の列ベクトルを返します。変換できない行は,NaN とします。

dec2base (n, b, len)[編集]

                                                           [Function File] 非負の整数 nに対応する,b進数の文字列を返します。以下の例は,3進数です。

dec2base (123, 3)
⇒ "11120"

もしn がベクトルならば,値あたり1 行として,最も長い値の幅にあわせてゼロを詰めた文字 列行列を返します。

b が文字列ならば,b の文字がn の桁に対する記号として使用されます。空白(’ ’)は,記号と しては使用できない。以下の例は,上の例を文字列で置き換えたものです。

dec2base (123, "aei")
⇒ "eeeia"

3 番目の引数len はオプションであり,結果の最小桁数を指定します。

base2dec (s, b)[編集]

                                                           [Function File]

b 進数で表記された文字列s を,整数へと変換します。 以下の例は,3 進数で表記された文字列"11120"を整数に変換しています。

base2dec ("11120", 3)
⇒ 123

もしsが文字列行列であれば,sの各行ごとに,変換した数値の列ベクトルを返します。 変換できない行は,NaN とします。 変換前に,行は右寄せされるので,末尾の空白は無視されます。 bが文字列であれば,bの文字列が,sの桁を表すために使用されます。 空白文字(’ ’)は,その記号としては使用されません。

base2dec ("yyyzx", "xyz")
⇒ 123

strjust (s, ["left"|"right"|"center"])[編集]

                                                           [Function File]

空白を含まない文字列s を,文字列の左,右あるいは中央に寄せます。 もしs が文字列配列ならば,配列の各文字列を寄せる。null文字は空白で置き換えます。もし寄せる方向が指定されないならば,すべての行は右寄せになる。

str2num (s)[編集]

                                                           [Function File] 文字列s を数値に変換します。

toascii (s)[編集]

                                                           [Mapping Function]

文字列s の,ASCII コードによる表現を行列として返します。以下に例を示します。

toascii ("ASCII")
⇒ [ 65, 83, 67, 73, 73 ]

tolower (s)[編集]

                                                           [Mapping Function]

文字列s について,大文字を小文字に置き換えた文字列を返します。アルファベットではない文字 は,変更しないでそのままにします。以下に例を示す。

tolower ("MiXeD cAsE 123")
⇒ "mixed case 123"

toupper (s)[編集]

                                                           [Built-in Function]

文字列sについて,小文字を大文字に置き換えた文字列を返します。アルファベットではない文字は,変更しないでそのままにします。 以下に例を示す。

toupper ("MiXeD cAsE 123")
⇒ "MIXED CASE 123"

do_string_escapes (string)[編集]

                                                           [Built-in Function]

文字列string 内の特殊文字をエスケープして返します。

undo_string_escapes (s)[編集]

                                                           [Built-in Function]

文字列内の特殊文字をエスケープ文字に戻す。たとえば,以下の式は,文字列変数bellにア ラート文字(control-g, ASCII コード7)を代入しています。

bell = "\a";

この文字列を表示すると,システムにより警告音が鳴るであろう(そのような設定にしてあれば)。 これは,通常は望むべき結果です。 しかし,時には,文字列のもともとの表現,すなわち特殊文字をエスケープシーケンスで置き換えた表現を表示できることが有効なことがあります。 以下の例,

octave:13> undo_string_escapes (bell)
ans = \a

は,表示できないアラート特殊文字を,表示可能な形式で置き換えています。

warn_num_to_str[編集]

                                                           [Built-in Variable]

もしwarn_num_to_strの値がゼロでないならば,行列表記において,文字列が文字と数値が混在した状態になっているときには, 数値をASCIIコードに暗黙的に変換するときに,警告を表示します。 以下の例

[ "f", 111, 111 ]
⇒ "foo"

は,warn_num_to_strがゼロでないときには,警告を出します。標準状態では1です。

warn_str_to_num[編集]

                                                           [Built-in Variable] もしwarn_str_to_numの値がゼロでないならば,文字列をその対応するASCIIコードの数 値へと暗黙的に変換するときに,警告を表示します。以下の例

"abc" + 0
⇒ 97 98 99

は,warn_str_to_numがゼロでないときには,警告を出します。標準状態では0です。

warn_single_quote_string[編集]

                                                           [Built-in Variable] 文字列定数を導入するために,シングルクオート文字を使うならば,警告を表示します。

5.4 キャラクタクラス関数[編集]

Octave では,標準C 言語ライブラリにある関数と同様に,以下のような文字種類をテストする関数も提供しています。これらは,すべて文字列配列について処理を行い,0 と1 からなる行列を返します。0 でない要素は,もとの文字列配列における対応する文字の状態が真であることを示しています。 以下に例を示します。

isalpha ("!Q@WERT^Y&")
⇒ [ 0, 1, 0, 1, 1, 1, 1, 0, 1, 0 ]

isalnum (s)[編集]

                                                           [Mapping Function]

アルファベットあるいは数値である文字について,1 を返す(isalpha (s)あるいはisdigit(s)のいずれかが真である)。

isalpha (s)[編集]

                                                           [Mapping Function]

isletter (s)[編集]

                                                           [Mapping Function]

アルファベットである文字について,1 を返す(isupper(s) あるいはislower(s)のいずれかが真である)。

isascii (s)[編集]

                                                           [Mapping Function]

ASCII コード(10 進数で0 から127 の範囲にある)文字について,1 を返します。

iscntrl (s)[編集]

                                                           [Mapping Function]

制御文字に対して1 を返します。

isdigit (s)[編集]

                                                           [Mapping Function]

10 進数値を表す文字に対して1 を返します。

isgraph (s)[編集]

                                                           [Mapping Function]

印刷可能文字に対して1 を返す(空白文字は含まない)。

islower (s)[編集]

                                                           [Mapping Function]

小文字アルファベットに対して1 を返します。

isprint (s)[編集]

                                                           [Mapping Function]

印刷可能文字に対して1 を返す(空白文字を含む)。

ispunct (s)[編集]

                                                           [Mapping Function]

句読点に対して1 を返します。

isspace (s)[編集]

                                                           [Mapping Function]

ホワイトスペース文字(スペース,改行,復帰,キャリッジリターン,タブおよび垂直タブ)に対して1 を返します。

isupper (s)[編集]

                                                           [Mapping Function]

大文字アルファベットに対して1 を返します。

isxdigit (s)[編集]

                                                           [Mapping Function]

16 進数値文字に対して1 を返します。