メインコンテンツまでスキップ

チャンクタイプ

チャンク表現は、次のすべてのチャンクタイプで作業することを可能にします:

タイプ定義
charactersテキスト内の個々の文字
wordsテキスト内の任意の量の空白(スペース、タブ、リターン)で区切られた単語
linesいくつかの標準的な行末(CR、LF、CRLFなど)で区切られた段落
text itemsカンマで区切られたテキストの部分
list itemsリスト内の個々のアイテム
bytesバイナリデータ内のバイト
occurrences定義されたパターンのテキスト一致
matches定義されたパターンとそのキャプチャグループのテキスト一致とテキスト範囲

さらに、テキストアイテム、行、単語を識別するために使用されるカスタムデリミタを指定することができ、さらに高い機能性を提供します。これら3つのテキストチャンクタイプはそれぞれ独特のタイプのデリミタを持ち、テキストアイテムは単一のテキスト文字列で区切られ、行はテキスト文字列のリストで区切られ、単語は文字セットからの任意の数と組み合わせの文字で区切られます。

Characters

最も単純なタイプのチャンクはキャラクターチャンクです。キャラクターはテキストの一文字で、表示文字と非表示文字(タブ、キャリッジリターン、ラインフィード文字などのコントロール文字を含む)の両方を含みます。charactercharと略すことができます。

put "The quick brown fox" into animal
put character 1 of animal--> T
put the last char of animal --> x
put chars 3 to 7 of animal --> e qui

Words

単一の単語は、空白文字を含まない文字列、または引用符で囲まれた文字列として定義されます。単語の範囲には、指定された最初の単語から最後の単語までのすべての文字、および間にあるすべての単語と空白が含まれます。空白文字は、スペース、タブ、およびリターン(改行)です。

put "Sometimes you feel like a nut; sometimes you don’t." into slogan
put the second word of slogan --> you
put word 6 of slogan --> nut;
put words 1 to 3 of slogan --> Sometimes you feel

引用符で囲まれたフレーズは、通常は引用符を含む単一の単語として扱われます:

put <<Mary said "Good day" to John.>> into sentence
put the third word of sentence --> "Good day"

SenseTalkは、チャンク内の単語を操作する際の側面を管理するために使用できるローカルおよびグローバルプロパティを含みます。単語を識別するために使用される文字セットは、the wordDelimiterローカルプロパティまたはthe defaultWordDelimiterグローバルプロパティを設定することで、Space、Tab、およびReturn以外のものに変更することができます。引用符付き単語を識別するために使用される引用符文字(または単語引用が完全に無効化されるかどうか)は、the wordQuotesローカルプロパティまたはthe defaultWordQuotesグローバルプロパティを使用して指定できます。

これらのローカルプロパティはチャンク表現のローカルおよびグローバルプロパティで定義されています:

  • the wordDelimiter, the defaultWordDelimiter
  • the wordQuotes, the defaultWordQuotes

行チャンク式を使用すると、対象テキスト内の1つ以上の行または段落を指定できます。行は初めて定義されるとき、標準的な行末文字の間の文字として定義されます。

put "line 1" & return & "line 2" & return & "line 3" into text
put the second line of text --> line 2
put line 6 of text --> ""
put lines 2 to 3 of text --> line 2 & return & line 3
--> line 2
--> line 3

SenseTalkは、チャンク内の行を操作する側面を管理するために使用できる2つのプロパティを含みます。行として定義するための行末(デリミタ文字列)のセットは、the lineDelimiterローカルプロパティを設定することでデフォルト以外のものに変更することができます。the lineDelimiterを空に設定すると、デフォルトリストに戻ります。

the defaultLineDelimiterグローバルプロパティはデフォルトの行デリミタセットを定義します。このプロパティは初めて設定されたときに、CRLF、Return、CarriageReturn、LineSeparator、ParagraphSeparatorに設定されます。

これらのプロパティはチャンク表現のローカルおよびグローバルプロパティで定義されています:

  • the lineDelimiter, the defaultLineDelimiter

テキスト項目

テキスト内の項目は通常、コンマ間のテキスト部分として定義されます:

put "A man, a plan, a canal. Panama!" into palindrome
put item 2 of palindrome --> " a plan"

区切り(デリミタ)文字は、the itemDelimiterプロパティを設定することでコンマ以外の何かに指定できます。the itemDelimiterのデフォルト値は、the defaultItemDelimiterグローバルプロパティによって決まります。これら2つのプロパティはチャンク表現のローカルおよびグローバルプロパティで定義されています:

  • the itemDelimiter, the defaultItemDelimiter

リスト項目

itemsという単語は、リスト内の要素を指すこともあります。

put ["red", "green", "blue"] into colors
put item 2 of colors -- green

SenseTalkは、値がリストであるかどうかによって、itemがテキスト項目を指すのかリスト項目を指すのかを判断します。値がリスト内の項目を指す場合、SenseTalkは自動的に参照がリスト項目であると仮定し、テキスト項目ではないとします。ただし、itemDelimiterが“”(空)に設定されている場合、itemsはテキスト項目ではなくリスト項目を指すでしょう。項目の取り扱い方法を制御する必要がある場合、一般的なitemsの代わりにlist itemsまたはtext itemsを明示的に指定することができます。これは、以下のように個々の項目に値を入れてリストを作成しようとしている場合に特に重要です:

put 1 into myText -- 1
put 2 into item 2 of myText
put mytext -- 1,2

上記のコードは、中央の文字がitemDelimiterであるテキスト文字列を生成します(itemDelimiteremptyに設定されていない場合)。テキストではなくリストを生成するには、list itemを指定します:

put 1 into myList -- 1
put 2 into list item 2 of myList
put myList -- [1,2]

リストの操作に関する詳細はリストおよびプロパティリストを参照してください。

Bytes

byteチャンクは、バイナリデータの一部を参照するために使用できます。

set the defaultDataFormat to "auto"
put <3f924618> into binaryData
put byte 2 of binaryData -- <92>

バイナリデータの操作には、バイトチャンクについての詳しい情報があります。

Occurrences

occurrenceoccurrencesの語は、文字列のチャンクとしてパターンマッチにアクセスし、マッチしたテキストを返すことができます。occurrenceを使って、文字列内のパターンの特定の単一の出現にアクセスし、occurrencesを使って出現のリストを返します。

occurrenceの同義語としてinstanceを、そして全ての場合でoccurrencesの代わりにinstancesを使用することができます。

例:

put occurrence 4 of <digit> in "V2.7 for 4/3/18" --> 3

例:

set proverb to "If wishes were horses, beggars would ride"
set wordEndingWithS to <start of word, word chars, word ending with "s">
put occurrence 2 of wordEndingWithS in proverb -- horses

範囲の出現をリクエストすると、ソース文字列の部分文字列ではなく、値のリストが返されます。

例:

前の例のSetコマンドと一緒に使用すると、

put instances 1 to 3 of wordEndingWithS in proverb -- [wishes,horses,beggars]

例:

put instances 3 to 5 of <digit> in "V2.7 for 4/3/18" -- [4,3,1]
put the first 3 occurrences of <max digits> in "42-16gh9-88" -- [42,16,9]

パターンの使用については、SenseTalkパターン言語の基礎を参照してください。

Matches

matchesキーワードは、文字列のチャンクとしてパターンにアクセスできるようにします。返される値は、マッチ全文をtextプロパティとして、マッチの範囲をtext_rangeプロパティとして含むマッチプロパティリストです。

matchesを使用して範囲をリクエストすると、パターンの各マッチに対する1つのプロパティリストを含むプロパティリストのリストが返されます。

put the second match of <3 digits> in "987654321" -- {text:"654", text_range:"4" to "6"}
put the last 2 matches of <max digits> in "42-16gh9-88" -- [{text:"9", text_range:"8" to "8"},{text:"88", text_range:"10" to "11"}]

パターンの使用については、SenseTalkパターン言語の基礎を参照してください。

Custom Chunks

標準のwordlinetext itemのチャンクはそのままでも多くのことに役立ちます。しかし、特定の形式のテキストを他の方法で分割したい場合もあります。例えば、多くのプログラムは、各行にタブ文字で区切られたいくつかの値を含むデータファイルを生成することができます。

このようなデータを扱う一つの方法は、the itemDelimitertabに設定し、各行のitemsにアクセスすることです。しかし、各タブで区切られたアイテムがカンマで区切られたいくつかの値を含むと仮定しましょう。これらの値に個々にアクセスするためには、the itemDelimiterをタブとカンマの間で切り替える必要があります。

SenseTalkは、このような場合には、delimited byというフレーズを使って、各チャンクに使用されるデリミタを指定することで、より簡単な代替手段を提供します:

add 1 to item 3 delimited by "," of item 5 delimited by tab \
of line 18 of file complexDataFile

同じ構文は、lineのチャンクにも使用することができます:

get line 6 delimited by creturn of oddLineBreakText

テキストアイテムと行を区切るデリミタは単一の文字に限定されません:

put item 2 delimited by "<>" of "12<>A19<>X" -- A19

カスタムデリミタはwordチャンクにも許可されていますが、アイテムや行とは挙動が異なります。単語は通常、スペース、タブ、改行で区切られます。これらの“ホワイトスペース”文字は、二つの単語の間にいくつでも連続して現れることができます。単語チャンクのカスタムデリミタを指定すると、“単語”は、提供したデリミタ文字列に含まれる文字の任意の数と組み合わせによって区切られます:

put word 2 delimited by "<>" of "12><<>>A19><>X" -- A19

以下の例は、行チャンク(各デリミタ文字列が別々のチャンクとして扱われる)と単語チャンク(各デリミタ文字列が一つの単語ブレークとして扱われる)でのカスタムデリミタの使用の違いを説明するのに役立つかもしれません:

put each line delimited by ["<",">"] of "12><<>>A19><>X" -- ["12","","","","","A19","","","X"]
put each word delimited by "<>" of "12><<>>A19><>X" -- ["12","A19","X"]