Next: , Previous: , Up: Strings and Characters   [Contents][Index]


6.8.4 String words

メモリ・ブロックに使用されるワードは文字列(string)にも役立つため、 文字列(string)の移動やコピーや比較や検索を行うワードについては、 Memory Blocks を参照してください。 文字や文字列を表示するワードについては、 see Displaying characters and strings を参照してください。

以下のワード群は、 既に存在している文字列(strings)に対して機能します:

str= ( c-addr1 u1 c-addr2 u2 – f  ) gforth-0.6 “str-equals”
str< ( c-addr1 u1 c-addr2 u2 – f  ) gforth-0.6 “str-less-than”
string-prefix? ( c-addr1 u1 c-addr2 u2 – f  ) gforth-0.6 “string-prefix-question”

c-addr2 u2c-addr1 u1 の接頭辞部分と合致しますか?

string-suffix? ( c-addr1 u1 c-addr2 u2 – f  ) gforth-1.0 “string-suffix-question”

c-addr2 u2c-addr1 u1 の接尾辞部分と合致しますか?

search ( c-addr1 u1 c-addr2 u2 – c-addr3 u3 flag  ) string “search”

文字列 c-addr1, u1 の中で、 文字列 c-addr2, u2 を検索します。 flag が true の場合: 見つかったアドレスを c-addr3 に、 文字列 c-addr2, u2 を含むそれ以降の文字数を u3 に返します(訳注: s" GNU gforth マニュアル" s" ニュア" search drop ." [" type ." ]" [ニュアル] ok )。 flag が false の場合: 一致するものが見つかりませんでした。 c-addr3, u3c-addr1, u1 と同じです。

scan ( c-addr1 u1 c – c-addr2 u2 ) gforth-0.2 “scan”

c に等しくないすべての文字をスキップします。 結果は c で始まる(c-addr2 u2)か空(empty; c-addr2+u2, 0)です。 Scan はシングルバイト文字(ASCII)に限定されます。 マルチバイト文字を検索するには、 search を使用します。

scan-back ( c-addr u1 c – c-addr u2  ) gforth-0.7 “scan-back”
skip ( c-addr1 u1 c – c-addr2 u2 ) gforth-0.2 “skip”

c に等しいすべての文字をスキップします。 結果は最初の非 C 文字で始まる(アドレス、長さ)か、 空(文字列の長さ0)になります。 skip はシングルバイト文字(ASCII)に限定されます。

-trailing ( c_addr u1 – c_addr u2  ) string “dash-trailing”

c-addr, u1 で指定された文字列の末尾をトリムします(末尾のスペースをすべて削除します)。 u2 は変更後の文字列の長さです。

/string ( c-addr1 u1 n – c-addr2 u2 ) string “slash-string”

c-addr1, u1 で指定された文字列の先頭から n 文字削除します(訳注: c-addr1+n, u1-n するだけっぽい…)。

safe/string ( c-addr1 u1 n – c-addr2 u2 ) gforth-1.0 “safe-slash-string”

c-addr1, u1 で指定された文字列の先頭から n 文字を削除します。 /string とは異なり、safe/string は少なくとも 0 文字、 最大で u1 文字を削除します。

cstring>sstring ( c-addr – c-addr u  ) gforth-0.2 “cstring-to-sstring”

C-addr はゼロで終わる文字列の開始アドレス、 u はその長さです。

以下のワード群は、 ASCII 文字については大文字と小文字を区別せずに比較しますが、 (ワードリストの検索のような)非 ASCII 文字については大文字と小文字を区別します 。

capscompare ( c-addr1 u1 c-addr2 u2 – n ) gforth-0.7 “capscompare”

文字列内のバイトの値に基づいて、 2 つの文字列(string)を辞書順(lexicographically)に比較します。ただし、 ASCII 文字は大文字と小文字を区別せずに比較し、 非 ASCII 文字は大文字と小文字を区別して、 かつ、 ロケール固有の照合順序を使用せずに比較します。 それらが等しい場合 n は 0 です。 最初の文字列が小さい場合 n は -1 です。 最初の文字列が大きい場合n は 1 です。

capsstring-prefix? ( c-addr1 u1 c-addr2 u2 – f  ) gforth-1.0 “capsstring-prefix?”

string-prefix? と似ていますが、 ASCII 文字の大文字と小文字は区別されません: c-addr2 u2c-addr1 u1 の接頭辞か?

capssearch ( c-addr1 u1 c-addr2 u2 – c-addr3 u3 flag  ) gforth-1.0 “capssearch”

search と似ていますが、 ASCII 文字の大文字と小文字は区別されません: c-addr1 u1 内で c-addr2 u2 を検索します。 見つかった場合 flag は true になります。

以下のワード群は、 ヒープに文字列(string)を作成、 またはヒープの文字列(string)を拡張します。

s+ ( c-addr1 u1 c-addr2 u2 – c-addr u  ) gforth-0.7 “s-plus”

c-addr u は、c-addr1 u1 (最初) と c-addr2 u2 (2 番目) を連結したのを含む、 新しく allocate された文字列です。

append ( c-addr1 u1 c-addr2 u2 – c-addr u  ) gforth-0.7 “append”

C-addr u は、c-addr1 u1 (最初) と c-addr2 u2 (2 番目) を連結したものです。 c-addr1 u1allocate された文字列であり、 u 文字の領域に対応するために(可能なら)サイズ変更(resize)して c-addr2 u2 の文字列を追加(append)します(サイズ変更できなくて、新しいアドレスに移動する可能性があります)。

>string-execute ( ... xt – ... addr u  ) gforth-1.0 “>string-execute”

xt を実行(execute)すると、 標準出力 (typeemit やそれらを使用するすべてのもの) を文字列にリダイレクトします。 結果の文字列は addr u で、これは割り当てられた(allocate)メモリ内にあります。 この文字列を開放(free)するのは、 >string-execute の呼び出し元の責任です。

以下のようにして、>string-execute を使用して s+ を定義できます:

: s+ ( c-addr1 u1 c-addr2 u2 – c-addr u ) [: 2swap type type ;] >string-execute ;

2 つの文字列だけを連結する場合、 >string-execute は効率的ではありませんが、 多くの文字列を連結する場合は、 >string-execute の方が効率的です。


Next: $tring words, Previous: String and Character literals, Up: Strings and Characters   [Contents][Index]