これは RuntimeRevolution 1.1.1 のヘルプにある文書を邦訳したものです。この文書の文責はUDIにあり、またUDIはこの文書についての一切の債務を負いません。 間違いがありましたら eudio@chabashira.co.jp までお知らせ下さい。この文書は必要と思われる時に適宜アップデートされます。

Help -> Revolution Documantation -> Development Guide -> Text and Data Proccessing -> About... chunk expressions


About chunk expressions
チャンク表現:
==============

参照:
--------------
character keyword, delete chunk command, item keyword, itemDelimiter property, line keyword, token keyword, word keyword


 チャンク表現とは、コンテナ内の特定の位置にあるテキストを、行やワードを使って記述する方法である。

 このトピックでは、チャンク指定の構文と、チャンク表現による位置指定で利用できるチャンクタイプについて解説する。

 このトピックを充分理解するためには、簡単なスクリプトの書き方を理解している必要がある。もし 'Getting Started' チュートリアルが済んでいるなら、そのための知識は得られている。


Contents:
What is a Chunk?
Chunk Types
Specifying a Chunk
Specifying a Range
Checking the Existence of a Chunk


What is a Chunk?
チャンクとは何か?
 チャンクとは、コンテナ内の特定の位置にあるテキストを記述するものである。チャンク表現を使って、ワードや、行や、指定したデリミタ(区切り文字)でコンテナの任意の部分を参照することが出来る。

 チャンクを使えば、コンテナ内のどんな位置でも表現することが出来る。例えばこれは add コマンドを使って、フィールド内の特定の行に数値を加えるものである(訳注:恐らく原文の誤り。行ではなくワードに加えています)

  add 1 to word 3 of field "Numbers"
 またチャンク表現を使って、コンテナの任意の位置のデータを置き換え( put コマンドで)たり、削除( delete-チャンク コマンドで)することが出来る。

A note about properties:
プロパティの注意:
 チャンク表現を使って、( script プロパティなどの)プロパティを読むことが出来る。しかしプロパティの変更には put コマンドではなく set コマンドを使うので、チャンク表現を使ってプロパティ値の一部だけを変更することは出来ない。代わりに、put コマンドでプロパティの値を変数に読み込み、チャンク表現を使って変数の値を加工してから、set コマンドを使って変数の値をプロパティに設定する。


Chunk Types
チャンクタイプ
 チャンク表現には、character、token、word、item、line のような、いくつかの指定方法がある。

The character chunk:
character チャンク:
 character(キャラクタ)は、アルファベット、数字、句読点、コントロールコードなどの、1バイトキャラクタである。

 character に他のチャンクタイプが含まれていることはない。他のチャンクタイプに character が含まれていることはある。

 character チャンク表現の省略形として、char を使うことが出来る。

The token chunk:
token チャンク:
 token(トークン)は、ある区切り文字で区切られた文字列である。 token チャンクは Transcript を解析したり、分析するのに便利である。 token チャンクについて詳しくは、Transcript Dictionary を参照しなさい。

 token には character が含まれていることがあるが、他のチャンクタイプが含まれていることはない。 token は word や line に含まれていることはあるが、character に含まれていることはない。

The word chunk:
word チャンク:
 word(ワード)は、スペース、tab、return で区切られた文字列、またはダブルクォートで囲われた文字列である。

 word には character や token が含まれていることはあるが、item や line が含まれていることはない。 word は line と item に含まれていることがあるが、character に含まれていることはない。

The item chunk and the itemDelimiter property:
item チャンクと itemDelimiter プロパティ:
 デフォルトでは、item はカンマで区切られた文字列である。

 item(アイテム)は、itemDelimiter プロパティで設定されたキャラクタで区切られた文字列である。デフォルトでは itemDelimiter はカンマに設定されているが、itemDelimiter に違うキャラクタを設定して、他のチャンクタイプを作ることが出来る。

 item には character、token、word が含まれていることはあるが、line が含まれていることはない。 item は line に含まれていることはあるが、word、token、character に含まれていることはない。

The line chunk:
line チャンク:
 line は return キャラクタで区切られた文字列である。

 line(ライン)には character、token、word、item が含まれていることがある。 line が他のチャンクタイプに含まれていることはない。


Specifying a Chunk
チャンクを指定する
 最も単純なチャンク表現は、他のタイプの中から1文字を指定するものである。これらのチャンク表現は全てこれに当てはまる:
  get char 2 of "ABC" -- "B" を表す
  get word 4 of "This is a test" -- "test" を表す
  get line 7 of myTestData
  put "A" into char 2 of myVariable
 もし存在しないチャンク番号を指定すると、そのチャンク表現の値は empty になる。例えば char 7 of "AB" という表現は、empty である。

 存在しないチャンクを変更しようとした場合の動作は、チャンクタイプによって異なる:
* character と word:
テキストに存在しなかったキャラクタやワードを、余分のスペースを加えずに、コンテナの最後に追加する。
* item:
テキストに存在しなかったアイテムを、必要な itemDelimiter キャラクタと共に追加する。
* line:
テキストに存在しなかった行を、必要な return キャラクタと共に追加する。

 マイナスの値を指定することで、前からではなく、後ろから位置を指定することが出来る。例えば -1 は指定したタイプの最後のチャンク、-2 は後ろから2番目のチャンクを指し、同様にして4番目も指定できる。これらは全て有効なチャンク指定である:
  get item -1 of "feather, ball, cap" -- "cap" が得られる
  get char -3 of "ABCD" -- "B" が得られる
(訳注: HyperTalk では、チャンク 0、-1、-2、-3、-4 に別の意味が割り当てられています)

 また、first、last、middle、second、third、fourth、fifth、sixth、seventh、eighth、ninth、tenth といった、順番を表す単語を使って、チャンクを指し示すことも出来る。ランダムな位置のチャンクを指す特別な単語に any がある。
  put "7" into last char of "1085" -- "1087" になる
 他のチャンク表現を組み合わせて、より複雑なチャンク表現を作ることが出来る。例えば word 4 of item 250 という文は、250行目の中の4番目のワードを指す。(訳注:恐らく原文の誤り)

 異なるチャンクタイプを組み合わせた複雑なチャンク表現では、チャンクタイプを順番に使わなければならない。これらは全て有効なチャンク表現である:
  char 7 of word 3 of myValue
  word 9 of item 2 of myValue
  last char of word 8 of line 4 of myValue
 しかしこれらは間違ったチャンク表現である。
  word 8 of char 2 of myValue -- char に word が含まれていることはない
  item 9 of first word of myValue -- word に item が含まれていることはない
  line 3 of last item of myValue -- item に line が含まれていることはない

Specifying a Range
範囲の指定
 チャンクの最初と終わりを指定して、1つ以上のチャンクの範囲を指定することが出来る。これらは全て正しいチャンク表現である:
  get char 1 to 3 of "ABCD" -- "ABC" を表す
  get word 2 to -1 of myValue -- 2番目のワードから最後のワードまで
  put it into line 7 to 21 of myValue -- 置換
 範囲を指定する場合は、その最初と最後に指定するチャンクは同じタイプでなければならない。また最初のチャンクは最後のチャンクよりも前になければならない。これらは間違ったチャンク表現である。
  char 3 to 1 of myValue -- 最初の方が最後よりも大きい
  char -1 to -4 of myValue -- 後ろから数えているので、最後の方が前にある
 マイナスの値を範囲指定で使う場合は、-x は -x+1 よりも前になければならない。例えば -1 は -2 よりも大きく、4 は -7 よりも大きい。範囲指定をする場合は、大きな数字が最後に来るようにする必要がある。


Checking the existence of a chunk
チャンクの存在を確認する
 number 関数は、与えられたタイプのチャンクの数を返す。例えば変数の中にどれくらいの行があるのかを調べるには、このような表現を使う:
  the number of lines in myVariable
 チャンク表現をネストさせて、大きなチャンクタイプの中の小さなチャンクタイプを数えることができる:
  the number of chars of item 10 of myVariable
 is among オペレータは、チャンク表現が大きな値の中にあるかを調べる。例えば大きな文字列の中に word 'free' があるかどうかを調べるには、is among オペレータを利用する:
  "free" is among the words of "Live free or die" -- true
  "free" is among the words of "Unfree world" -- false
 2番目の例で 'free' という文字列が値の中に見つからずに false になるのは、それが大きなワードの一部であり、独立したワードではないからである。

 最後に、文字列中のキャラクタの位置を調べる offset 関数を使って、1文字キャラクタが存在するか、それがどこにあるか、を調べることが出来る。例えばこの表現は 'C' の見つかったキャラクタの位置を返す:
  get offset("C","ABC") -- 3 が返ってくる
 lineOffset、itemOffset、wordOffset 関数を使えば、同じようにして、それがどの行、アイテム、ワードに含まれているかを調べることも出来る。

邦訳/文責:UDI
2003.01.15
2003.01.16

inserted by FC2 system