テキストおよびデータ操作

SenseTalkには、強力なテキスト処理能力が備わっています。 チャンク式で説明するように、SenseTalkのチャンク式は、テキスト文字列の特定の部分にアクセスしたり、操作したりするためのパワフルかつ直観的な手段を提供します。 また、テキストに関する情報を入手したり、テキストとその他のデータフォーマット間で変換を行ったり、高度なテキスト操作を行ったりするための多くのコマンドと関数を利用できます。 このようなアクションを実行するためのコマンドと関数について、以下で詳しく説明します。

capitalized()関数

挙動:capitalized関数は、各単語の最初の文字が大文字で始まるテキストを返します。

構文:

{the} capitalized of stringFactor

capitalized(stringExpr)

例:

put capitalized of "now and then" -- "Now And Then"と示されます

関連:

charToNum()関数

挙動:パラメータの最初の文字を表す数値コード(Unicode)を返します。

構文:

{the} charToNum of textFactor

charToNum(textExpr)

例:

put charToNum("a") -- 97

関連:

deleteコマンド

挙動:deleteコマンドは、コンテナ内のターゲットテキスト文字列の大量のテキストや1つ以上のオカレンスを削除します。 この最も簡潔なフォームにおいて、本コマンドは大文字と小文字に関係なく、ターゲットテキストの各オカレンスを削除します。 より高度なオプションを使用すると、削除するチャンクの場所で特定したり、ターゲット文字列のオカレンスの数を指定(あるいは特定のオカレンスを指定)したり、正確な大文字と小文字のマッチングを指定することが可能です。

deleteコマンドの最初のフォームでは、チャンクは、削除するコンテナの一部を描写する任意のチャンク式とすることができます。 詳細情報は、チャンク式を参照してください。

deleteコマンドの2つ目のフォームでは、targetTextを定義するいずれかのオプションを1つと、削除を行うcontainerを指定する必要があります。 大文字・小文字を区別するオプションは任意で使用できます。 使用するオプションは、タイプごとに1つしか指定できないとはいえ、任意の順番で指定できます。

構文:

delete chunk [of | in] container
delete {オプション}

オプション:

[in | within | from] container

{ all {occurrences of} | every {occurrence of} } targetText

{the} [first | last] howMany {occurrences of} targetText

{the} ordinalTerm {occurrence of} targetText

occurrence ordinalNumber of targetText

[with | considering] case

[without | ignoring] case

例:

delete the first 2 characters of line 15 of output

例:

delete the last "s" in word 3 of sentence

例:

delete every occurrence of "ugly" in manual

例:

delete the first line of manual

例:

delete the third "i" within phrase considering case

技術トピック

このようなdeleteコマンドにおいて、in containerまたはwithin containerオプションを使用する必要があります。 containerは、変数や変数の一部(チャンク式を使用)、またはテキストファイルなど、任意の形式とすることができます。 containerが変数の場合は、そのコンテンツはリストやプロパティリストなど、任意の形式とすることができます。 deleteコマンドは、このようなコンテナ内で任意の深さまでネスト化されたすべての値を検索し、指定されたテキストを削除します。

削除するテキストを指定するには、deleteコマンド内でいずれかのtargetTextオプションを使用する必要があります。 単にtargetText式を指定するだけでは、本コマンドによってcontainer内で本式の値の各オカレンスが削除される結果となるため、本オプションの使用には注意が必要です。 この場合は、必要に応じてtargetTextの前にall {occurrences of}またはevery {occurrence of}を置き、影響をより明確化することができます。

firstまたはlastオプションを使用する場合は、howManycontainerの先頭または末尾をそれぞれ起点として、削除するtargetTextのオカレンス数を指定します。

ordinalTermまたはordinalNumberを使用する場合は、targetTextの単一のオカレンスのみが削除されます。 ordinalTermは、firstsecondthirdなどの序数か、middle(またはmid)、penultimatelastまたはanyのいずれかの用語とする必要があります。 ordinalNumberは、数として評価される式とする必要があります。 これが負の数の場合は、replaceコマンドがcontainerの末尾から逆向きにカウントし、削除するオカレンスを決定します。

considering caseを指定する場合は、コンテナ内で正確にマッチするtargetTextのオカレンスのみが削除の対象となります。 デフォルトでは、大文字と小文字の区別に関係なく、targetTextのオカレンスが削除されます。

deleteコマンドは、削除されたオカレンス数を示す結果(the result関数で返される)を設定します。

関連:

excludingItems()関数

挙動:excludingItems関数は、リスト1からリスト2に存在する値を除外したすべての値を含むリストを返します。

構文:

the items of [リスト1] excluding those in [リスト2]

例:

put ("carrots","bananas","pistachios","lettuce","wasabi","aspirin","tissues") into GroceryList

put ("cat food","tissues","aspirin","soda","socks") into TargetList

put the items of GroceryList excluding those in TargetList // (carrots,bananas,pistachios,lettuce,wasabi)

format()関数

挙動:テンプレートの文字列によって定義される、フォーマットされた任意の個数の値のテキスト表現を返します。 テンプレートは、特殊なフォーマットコードが混在したテキストで構成され、定義された小数の桁数でフォーマットされる数値や、定義された最短の長さを満たすために追加スペースでフォーマットされるテキスト値などを指定します。

構文:

format(テンプレート, 値1, 値2, ...)

例:

format("The interest rate is %3.2f, interestRate)

例:

format(reportTemplate, day(date), month(date), description, amount)

例:

format("%x", maskValue) -- maskValueを16進数に変換します

技術トピック

template文字列には、以下で概要を説明するように、標準的なUnix printfコマンドによってサポートされる任意のフォーマットコードを利用できます。 バックスラッシュで始まる特定の「エスケープシーケンス」は、次のように翻訳されます。\e:エスケープ文字、\a:ベル文字、\b:バックスペース文字、\f:フォームフィード文字、\n:ニューライン文字、\r:キャリッジリターン文字、\t:水平タブ文字、\v:垂直タブ文字、\’:単一引用符、\\:バックスラッシュ文字、\num:ASCII値が1~3桁の8進数の文字num

フォーマットコードは、パーセント記号(%)で始まり、その後にその値の長さと小数の桁数を示すためのオプションの修飾子が続き、末尾に実行するフォーマットのタイプを指定する文字(diuoxXfeEgGbcsaAまたは@)(以下の表を参照)が付きます。 連続する2つのパーセント記号(%%)は、出力文字列内でパーセント記号を作成するのに使用できます。

パーセント記号の後、文字コードの前で、フォーマットはこの値の出力長さを示す数字を含めることができます。 長さの後に、小数点(「.」)と「精度」を表す数字を付けることができます。これは、数値として表示する小数の桁数、または文字列から表示させる最大文字数を表します。 長さまたは精度の代わりにアスタリスク(「*」)を使用すると、その値を追加パラメータから読み取る必要があることが示されます。

また、必要に応じて、フォーマットコードは長さの前に以下の任意の修飾子コードを利用できます。

  • マイナス記号(-)は、与えられた長さの範囲内で値を左揃えする必要があることを示します。
  • プラス記号(+)は、符号付きの数値フォーマットが、正の数に対してプラス記号(+)を表示する必要があることを示します。
  • スペース( )は、符号付きの数値フォーマットが、正の数に対して追加スペースを組み込む必要があることを示します。
  • ゼロ(0)は、指定された長さを満たすのに、(スペースではなく)先行ゼロを使用する必要があることを示します。
  • ナンバー記号(#)は、以下で説明するように、特定の数値フォーマットに様々な影響を及ぼします。

以下の表に、認識されるフォーマットコードとその意味、および例を示します。

dまたはi

符号付き(正または負)10進整数(#に効果はありません)。

format("%4d", 27) —> " 27"

format("%+-4d", 27) —> "+27 "

format("%04i", 27) —> "0027"

u

符号なし(正でなければならない)10進整数(#に効果はありません)。

format("%u", 27) —> "27"

o

符号なし8進整数(#は精度を高め、先行ゼロを強制します)。

format("%#o", 27) —> "033"

xまたはX

符号なし16進整数 (#は、ゼロ以外の値の前に「0x」または「0X」を付与します)。

format("%x", 27) —> "1b"

format("%#X", 27) —> "0X1B"

f

符号付き固定精度数(#は、小数点以下の数を持たない場合でも、少数点を表示することを強制します)。

format("%f", 27) —> "27.000000"(デフォルト精度は小数点以下6桁)

format("%7.3f", 27.6349) —> " 27.635"

format("%+*.*f", 7, 2, 27.63"

format("%#-5.0f", 27) —> "27. "

eまたはE

指数の前に「e」または「E」を伴う指数表記の符号付き数値(#は、小数点以下の数値を持たない場合でも、少数点を表示することを強制します)。

format("%e", 27) —> "2.700000e+01"

format("%9.2E", 0.04567) —> "4.57E-02"

gまたはG

より少ないスペースで最大精度を与える、固定(「f」と同じ)または指数(「e」または「E」と同じ)表記の符号付き数値(#は小数点以下の数値を持たない場合でも、少数点を表示することを強制します。後置ゼロは削除されません)。

format("%g", 27) —> "27"

format("%+g", 0.04567) —> "+0.04567"

c

単一文字

format("%-2c", "hello") —> "h"

s

テキスト文字列

format("%6s", "hello") —> "hello"

format("%-3.2s", ".2s", "hello") —> "he "

b

バックスラッシュのエスケープシーケンスが展開されるテキスト文字列

format("%b", "\tHello\\") —> " Hello\"

aまたはA

小文字のp(または大文字のP)を使用して、小数点の前の先行0x(または0X)と16進数の1桁による科学的表記で印刷される符号付き数値で、指数を導入するために利用される(Windowsでは利用不可)

@

通常のテキストフォーマットで表示される任意の値

関連:

globallyUniqueString()関数

挙動:globallyUniqueString関数は、呼び出されるたびに固有の文字列を提供します。 globallyUniqueString()を呼び出すことで、識別子やキー、ファイル名として使用される固有の文字列を入手できます。 この値は、システム、アプリケーションインスタンス、および個々の関数呼び出しにわたって一意の値となります。

構文:

the globallyUniqueString

globallyUniqueString()

例:

put globallyUniqueString() into idString

例:

set part's code to the globallyUniqueString -- 部品に固有の識別子を与えます

insert コマンド、pushコマンド

挙動:リストの末尾、またはリストの特定のアイテムの前後に値または値のリストを挿入します。

構文:

insert expr {nested | item by item} [before | into | after] container

例:

insert 5 into myList

例:

push "hedgehog" into Animalia

例:

insert newName before item index of nameList

例:

insert (3,5) nested after pointList -- ネスト化されたリストを作成します

例:

insert "myBuddy" before my helpers
注:pushコマンドは、リストの末尾に値を追加します。 pushコマンドとpopコマンドは、リストをスタックとして扱います。 スタックに押し出されたアイテムは、popコマンドを用いて逆の順序で取り出すことができます。 pushコマンドとpullコマンドは、リストをキューとして扱います。 pullコマンドは、pushコマンドがキューに追加したのと同じ順序でアイテムを1つずつ取り出します。

技術トピック

insertコマンドの構文において、exprは、その値がcontainerに挿入される式を表します。 beforeを指定する場合は、新しい値がリストの先頭に挿入されます。 afterを指定する場合は、新しい値がリストの末尾に挿入されます。 intoを指定する場合は、新しい値がリストの適切な位置に挿入されます(現時点では常にリストの末尾)。

containerをリストの特定のアイテムとして指定する場合は(例:insert x after item 2 of myList)、beforeまたはafterオプションにより、新しい値がリストの当該アイテムの前後に挿入されます。 ただし、intoオプションは、その既存アイテムが操作対象リストであるかのように扱います。 これが単一の値である場合は、新しい値が2番目のアイテムとして付与されるリスト(メインリスト内でネスト化される)となります。 ターゲットアイテムが既にネスト化されたリストの場合は、新しい値はそのリスト内に挿入されます。

containerをリスト内のアイテムの範囲として指定する場合は、beforeオプションはその範囲の最初のアイテムの前に新しい値を挿入し、afterオプションとintoオプションは、どちらも与えられた範囲の最後のアイテムの後に新しい値を挿入します。

exprが単一のアイテムではなくアイテムのリストを生成する場合は、そのリストはユニットとして挿入され、nestedオプションを指定した場合にネスト化されたリストを作成します。 item by itemを指定する場合は、そのリスト内の各アイテムは、送り先のリストに個別に挿入されます。 どちらのオプションも指定しない場合は、挿入タイプは、the listInsertionModeローカルプロパティが「nested」または「item by item」のいずれかに設定されている場合はその設定によって、そうでない場合は初期設定が「item by item」であるthe defaultListInsertionModeグローバルプロパティによって制御されます。

insertコマンドは、送り先のコンテナ内で削除や置き換えを行いません。 コンテナに値を挿入する場合は、それがたとえemptyだとしても、またはそもそも未定義の場合でも常にリストとなります。

intersection()関数

挙動:intersection関数は、リスト1リスト2の両方に存在するすべての値を含むリストを返します。 重複する値は、最終的なリストからすべて削除されます。

構文:

the intersection of [リスト1] and [リスト2]

例:

put ("carrots","bananas","pistachios","lettuce","wasabi","aspirin","tissues") into GroceryList

put ("cat food","tissues","aspirin","soda","socks") into TargetList

put the intersection of GroceryList and TargetList // (aspirin,tissues)

joinコマンドとjoin()関数

挙動:join(またはこのシノニムのcombine)コマンドは、指定された区切り文字を使用して、リストのアイテムまたはプロパティリストのプロパティを単一のテキスト値に組み入れます。 ソース値がコンテナの場合は、そのコンテナは本コマンドの結果として生じるテキスト文字列を受け取ります。 ソース値がコンテナではない場合は、変数itが、ソース値の要素の結合の結果として生じるテキストを受け取ります。 with quotesオプションは、各値を引用符で囲むのに使用できます。

関数として呼び出す場合は、式の一部として使いやすくするために、join(またはcombine)は結合されたテキスト値を返します。

コマンド構文:

[join | combine] source{[using | with | by] listDelimiter {and keyDelimiter} {[using | with] quotes {quotes}} }

関数構文:

[join | combine] (source {, listDelimiter {, keyDelimiter {, quotes} } } )

例:

join (1,2,3) using ":" -- 注:ソース値はコンテナではありませんput it -- 1:2:3

例:

combine (1,2,3) using ":" with quotes

put it -- "1":"2":"3"

例:

put (1,2,3) into numbers -- コンテナ内のリストから開始します

join numbers using ":" with quotes ("<<",">>")

put numbers -- <<1>>:<<2>>:<<3>>

例:

combine(a:12,b:5) using ";" and "/"

put it -- a/12;b/5

例:

join (a:12,b:5) with "##" using quotes -- 区切り文字1つのみ

put it -- "12"##"5"

技術トピック

sourceがコンテナ(変数)の場合は、その変数は、join演算の結果を含むテキスト値となります。 それ以外の場合は、変数itが結果のテキストを受け取ります。

sourceがリストの場合は、そのアイテムは、アイテム間でlistDelimiterを使用して結合されます。 ソースがプロパティリストで、listDelimiterのみを指定する場合は、そのプロパティ値は値間でlistDelimiterを使用して結合されます。 keyDelimiterlistDelimiterの両方を指定する場合は、各エントリを区切るためにlistDelimiterが、各キーとエントリ内の値とを区切るためにkeyDelimiterが使用され、結果には値の前に各プロパティのキー(プロパティ名)が組み込まれます。

listDelimiterkeyDelimiterのどちらも指定しない場合は、sourceのアイテムまたはプロパティは、必要に応じてlistSeparatorplistEntrySeparatorplistKeySeparatorプロパティの現在の値を利用して、テキスト文字列に統合されます。 同じことが、ネスト化されたリストとプロパティリストにも適用されます。

using quotesまたはwith quotesを指定すると、それぞれの値が引用符で囲まれます。 quotes値を指定すると、標準的な二重引用符の代わりにこの値が使用されます。 quotesがリストの場合は、最初のアイテムが各値の前で使用され、2番目のアイテムが各値の後で使用されます。

関連:

keepCharacters()関数

挙動:指定した英数字や文字セットを除くすべての文字をテキストから削除します。 本関数は、1~2個のパラメータを使用します。 最初のパラメータは、フィルタ処理されるソーステキスト値です。 2番目(オプション)のパラメータは、ソーステキスト内で保持される文字セットを定義するテキスト文字列です。 2番目のパラメータを指定しない場合は、デフォルトで文字と数字が保持されます。 本関数は大文字と小文字を区別することに注意してください。

構文:

[keepCharacters(textExpr, textExpr)

例:

put keepCharacters("SenseTalk", "es")

-- (eとsを除くすべての文字が削除されます)

length()関数

挙動:テキスト内の文字数を返します。

構文:

{the} length of textFactor

length(textExpr)

例:

put length("SenseTalk") -- 9

例:

if the length of name is less than 3 \

or the length of name is greater than 12 then

put "Invalid name!"

end if

lowercase()(またはtoLower())関数

挙動:lowercase(およびこのシノニムのtoLower)関数は、すべて小文字(大文字ではない)に変換された式を返します。

構文:

{the} lowercase of stringFactor

lowercase(stringExpr)

例:

put lowercase of "Hi There!" -- 「hi there!」と示されます

関連:

merge()関数

挙動:ソーステキストをスキャンし、mergeデリミタで囲まれた式の評価と代入を行い、結合されたテキストを返します。 標準的なmergeデリミタは、二重角括弧([[と]])です。 [[と]]で囲まれたソーステキスト内の式は、その値に置き換えられます。 式は現在の文脈において評価されるため、merge式内の任意のローカル変数やグローバル変数は、merge関数を呼び出したハンドラ内に存在するのと同じ値を保持します。

mergeデリミタ間のテキストには、シンプルな式のほかに、SenseTalkステートメントを組み込むことができます。 これは、テキストの一部にrepeatループを組み込む場合などのように、非常に強力になり得ます。

最後の2つのパラメータはオプションであり、source文字列のみが必須となります。 デリミタ1およびデリミタ2を指定すると、これらがmergeデリミタとして[[と]]の代わりに使用されます。 デリミタ1のみを指定すると、その値がデリミタの初めと終わりとして使用されます。 the evaluationContextグローバルプロパティを GlobalまたはUniversalに設定すると、変数は結合プロセス中にローカルではなく、グローバルまたはユニバーサルとして処理されます。

merge関数を呼び出すための簡易表現として、引用符で囲まれた文字列の前に!を使用できます。

構文:

merge(source, デリミタ1, デリミタ2)

put !"Quoted string delimiter"

例:

put "Jorge" into name

put merge("Hello [[name]], how are you?") -- 「Hello Jorge, how are you?」と表示されます

例:

put merge of "[[repeat with n=0 to 99]][[n]],[[end repeat]]" \

into numbersList

例:

put ("cat", "dog", "rabbit", "fish") into pets

put merge of "[[repeat with each item of pets]][[put it]][[end repeat]]"

-- cat

dog

rabbit

fish

例:

put merge(template) into file "/Library/WebServer/Documents/report"

例:

put "September" into monthName

put !"The month is now [[monthName]]" -- "The month is now September"

number of演算子

挙動:本演算子は、単語ofの前に変数ではなく、リテラル数を必要とします。 本演算子は、分数の数値や単位に役立てることができます。 値が数またはリストである場合、値にはその数値が掛けられます。 それ以外の場合は、number of演算子は、repeated演算子のように値に繰り返しをもたらします。

構文:

put 分数 of a 単位

put 数値 of "テキスト"

put 数値 of (値1,値2,値3) as a list

例:

put three hundredths of an inch -- 0.03インチ

例:

put five of "#" -- "#####"

例:

put 12 of (1,2,3) -- (12,24,36)

例:

put 3 of (a,b,c) as a list -- (a,b,c,a,b,c,a,b,c)

例:

set the listInsertionMode to nested

put 3 of (a,b,c) as a list -- ((a,b,c),(a,b,c),(a,b,c))

numToChar()関数

挙動:所定の数値コード(Unicode)で表現される文字を返します。

構文:

{the} numToChar of numFactor

numToChar(numExpr)

例:

put numToChar(97) -- 「a」と示されます

関連:

offset()range()everyOffset()everyRange()関数

挙動:offset()関数は、ソーステキスト内のターゲットテキストのオフセット位置、またはソースリスト内のターゲットの値もしくは値のリストのオフセットを返します。 range()関数は、同様に機能しますが、ターゲットがソース内で検出される場所の範囲(開始位置と終了位置)を返します。 検索中のターゲット値がソース内で検出されない場合は、値0(オフセット用)または空の範囲の0~0が返されます。 offset()またはrange()に対してオプションのパラメータを利用すると、特定のポイント以降の従属文字列のオカレンスを検出したり、検索が大文字と小文字を区別するかどうかを管理したり、ソース文字列の末尾から逆方向に検索することが可能になります。 オプションのパラメータであるlocationおよびpositionは、offset関数またはrange関数において、afterまたはbeforeの後に置かれます。

everyOffset()関数とeveryRange()関数は、これらに対応する関数と同等に機能しますが、ターゲットがソース内で検出される場所のすべてのオフセットまたはすべての範囲のリストを返します。

これらすべての関数は、通常、直接呼び出すのではなく、英語のような自然言語のフレーズを使用して呼び出されます。 自然言語は、英語のようなフレーズとして、offset式またはrange式を記述するのにも利用できます。

構文:

offset(ターゲット, ソース)

offset(ターゲット, ソース, beyondPosition, caseSensitive, reverse)

range(ターゲット, ソース)

range(ターゲット, ソース, beyondPosition, caseSensitive, reverse)

everyOffset(ターゲット, ソース)

everyOffset(ターゲット, ソース, beyondPosition, caseSensitive, reverse)

everyRange(ターゲット, ソース)

everyRange(ターゲット, ソース, beyondPosition, caseSensitive, reverse)

自然構文:

{the | every} offset of targetFactor [in | within] sourceFactor { [before | after] [ {position | location} beyondPosition | {the} end] } {considering case | ignoring case}

{the | every} range of targetFactor [in | within] sourceFactor { [before | after] [ {position | location} beyondPosition | {the} end] } {considering case | ignoring case}

例:

put offset("the", "Hi there!") -- 4

put range("the", "Hi there!") -- 4~6

put the range of "the" in "Hi there!" -- 4~6

例:

get every offset of "eggs" within recipe

例:

put offset ("th", "Hi there, from Thoughtful Software.", 5, FALSE)

-- 16(「th」はThoughtfulの「Th」と一致します)

put offset("th", "Hi there, from Thoughtful Software.", 5, TRUE)

-- 0 (大文字と小文字が区別されるため、検出されません:「th」は「Th」と一致せず、検索は「there」の「th」の後から開始されます)

put offset of "th" within "Hi there, from Thoughtful Software" \

after 5 considering case -- 0(上の例と同様に自然構文の利用)

put offset of "th" within "Hi there, from Thoughtful Software" \

before end -- 16(逆方向に検索)

put every offset of "th" within "Hi there, from Thoughtful Software" \

before end -- (16,4)

例:

set ssn to <3 digits then dash then 2 digits then dash then 4 digits>

put every offset of ssn in textblock into ssnList // テキストブロック内におけるssnパターンマッチの全オカレンスのオフセットを検索し、その位置をssnListリストに入れます

例:

put the range of "cat" in "concatenation" into catRange

put catRange-- 4~6

put chars catRange of "concatenation" -- "cat"

例:

put the range of (c,d,e) in (a,b,c,d,e,f,g) -- 3~5

put the range of (c,d,e) in (a,b,c,d,X,e,f,g) -- 0~0

例:

put the range of "money" in accounts after position lastFoundPos

popコマンド

挙動:popコマンドは、リストから最後の値を取り除き、その値を変数に格納します。

パラメータ:

構文:

pop [スタックリスト] into [変数]

pop item number of [スタックリスト] into [変数]

例:

put ("dog","cat","armadillo") into Animalia

push "hedgehog" into Animalia

pop Animalia into Pets

put Pets // 「hedgehog」が返されます

put ("dog","cat","armadillo") into Animalia

push "hedgehog" into Animalia

pop item two of Animalia into Pets

put Pets // 「cat」が返されます

注:pushコマンドとpopコマンドは、リストをスタックとして扱います。 スタックに押し出されたアイテムは、popコマンドを用いて逆の順序で取り出すことができます。

pullコマンド

挙動:pullコマンドは、リストから最初の値を取り除き、その値を変数に格納します。

パラメータ:オプションで、変数に格納する値を指定できます。

構文:

pull from [キューリスト] into [変数]

pull item number of [キューリスト] into [変数]

例:

put ("dog","cat","armadillo") into Animalia

push "hedgehog" into Animalia

pull from Animalia into Pets

put Pets // 「dog」が返されます

put ("dog","cat","armadillo") into Animalia

push "hedgehog" into Animalia

pull item three of Animalia into Pets

put Pets // 「armadillo」が返されます

注:pushコマンドとpullコマンドは、リストをキューとして扱います。 pullコマンドは、pushコマンドによってキューに追加されたのと同じ順序で、アイテムを1つずつ取り出します。

replaceコマンド

挙動:replaceコマンドは、コンテナ内の古い(ターゲット)テキスト文字列の1つ以上のオカレンスを、新しい(置換)テキスト文字列に置き換えます。 この非常にシンプルなフォームにおいて、本コマンドは大文字と小文字に関係なく、古いテキストのオカレンスをすべて新しいテキストに置き換えます。 より高度なオプションを使用すると、置き換えられる古いテキストのオカレンス数(または特定のオカレンス)を指定したり、正確な大文字と小文字のマッチングを指定することが可能になります。

パラメータ:beyondPosition、caseSensitiveおよびreverseパラメータはオプションであり、(検索する)target文字列または値と、(検索先の)source文字列またはリストのみが必須です。

beyondPositionを指定する場合は、検索はその位置以降のソース文字列の次の文字(またはソースリストの次のアイテム)から開始されます。 ソースの先頭から検索するには、値ゼロを使用します(デフォルト)。 本関数によって返される値は常に、ターゲット文字列がソース文字列内で検出された位置(または範囲)か、検出されなかった場合はゼロとなります。 負の数のbeyondPositionを指定すると、ソースの末尾を基準とする位置が表されます。 この場合は、戻り値もソースの末尾からのオフセットを示す負の数として与えられます。

caseSensitiveパラメータ(指定する場合)は、trueまたはfalseとして評価されます。 本パラメータがtrueの場合は、検索は大文字と小文字が完全に一致するマッチングのみを検出します。 デフォルト(パラメータを指定しない場合)はfalseとなります。 自然構文を使用する場合は、検索はconsidering caseを指定すると大文字と小文字が区別され、ignoring caseを指定すると大文字と小文字は区別されません。 デフォルトでは、大文字と小文字は区別されません。

reverseパラメータ(指定する場合)は、trueまたはfalseとして評価されます。 自然構文内でのbeforeの使用は、reverseパラメータをtrueに設定するのに相当します。 本パラメータがtrueの場合は、ソースの末尾(またはbeyondPositionの前の文字)から先頭方向に向かう逆検索が行われます。 デフォルト(パラメータを指定しない場合)はfalseとなります。

構文:

replace オプション

オプション

[in | within] container

{ all {occurrences of} | every {occurrence of} } oldText
{the} [first | last] howMany {occurrences of} oldText

{the} ordinalTerm {occurrence of} oldText

occurrence ordinalNumber of oldText

[with | by] newText

[with | considering] case
[without | ignoring] case

例:

replace "Johnson" by "Johansson" in bigReport

例:

replace the last "s" in word 3 of sentence with empty

例:

replace every occurrence of " he " in manual with " she "

例:

replace the first 2 "i" in phrase considering case by "I"

技術トピック

replaceコマンドの一部として、いくつかのオプションを指定する必要があります。 代入が行われるcontainerに加えて、oldTextnewTextの両方を必ず指定する必要があります。 その他のオプションは任意で使用できます。 オプションはタイプごとに1つしか指定できないものの、任意の順番で指定できます。

replaceコマンド内では、in containerまたはwithin containerオプションを必ず使用する必要があります。 containerは、変数や変数の一部(チャンク式を使用)、またはテキストファイルなど、任意の形式とすることができます。 containerが変数の場合は、そのコンテンツはリストやプロパティリストなど、任意の形式とすることができます。 replaceコマンドは、このようなコンテナ内で任意の深さにネスト化されたすべての値に含まれるテキストを置き換えます。

コンテナ内で選択された古いテキストのオカレンスを置換する新しいテキストを指定するには、with newTextまたはby newTextオプションを使用する必要があります。

置換対象を指定するには、replaceコマンド内でいずれかのoldTextオプションを使用する必要があります。 oldText式を指定するだけで、本コマンドによってコンテナ内の本式の値の各オカレンス位置が検出され、newTextの値と置き換えることができます。 また、必要に応じてオプションでoldTextの前にall {occurrences of}またはevery {occurrence of}を置くこともできます。

firstまたはlastオプションを使用する場合は、howManycontainerの先頭または末尾をそれぞれ起点として、置き換えるoldTextのオカレンス数を指定します。

ordinalTermまたはordinalNumberを使用する場合は、newTextによってoldTextの単一のオカレンスのみが置き換えられます。 ordinalTermは、firstsecondthirdなどの序数か、middle(またはmid)、penultimatelastまたはanyのいずれかの用語とする必要があります。 ordinalNumberは、数として評価される式とする必要があります。 これが負の数の場合は、replaceコマンドはcontainerの末尾から逆向きにカウントし、置換するオカレンスを決定します。

considering caseを指定する場合は、container内で正確にマッチするoldTextのオカレンスのみが置換の対象となります。 デフォルトでは、大文字と小文字を区別せずにマッチングを行います。

replaceコマンドは、置換したオカレンス数を示す(the result関数で返される)結果を設定します。

関連:テキストの一部を置換するその他の方法に関するチャンク式

repeated演算子

挙動:指定された長さを上限として、所定の回数だけ繰り返されるテキストの文字列を作成したり、繰り返されたリストを作成します。

構文:

put "text" repeated number times

put "text" repeated number times as a list

put "text" repeated to length number

put a list of text repeated number times

例:

put "$" repeated 12 times -- "$$$$$$$$$$$$"

例:

put "Hello" repeated to length 12 -- "HelloHelloHe"

例:

put "$" repeated 6 times as a list -- ("$","$","$","$","$","$")

例:

put a list of 7 repeated 3 times -- (7,7,7)

rtfToText()関数

挙動:RTFフォーマットのリッチテキストをプレーンテキストに変換します。 richTextの値は、RTFフォーマットでエンコードされたテキストである必要があります。 rtfToText関数は、すべてのフォーマット情報を削除し、richTextからプレーンテキストのコンテンツだけを返します。

構文:

{the} rtfToText of richText

rtfToText(richText)

例:

put the rtfToText of file "Picasso.rtf" into picassoText

sortコマンド、sorted演算子

挙動:sortコマンドは、コンテナのコンテンツをソートします。 コンテナのコンテンツは、ソートされたコンテンツで置き換えられます。

sorted演算子は値のコンテンツをソートし、コンテナ内に格納できるソート済みの値、またはより長い式の一部として使用できるソート済みの値を生成します。

構文:

sort {オプション} {by sortByExpr}

factor sorted {オプション} {by sortByExpr}

オプション:

as chunkTypes // sorted演算子の場合のみ

{ {the} {[first | last] count} chunkTypes of } containerToSort // sortコマンドの場合のみ

{in} [ascending | descending | increasing | decreasing | reverse | reversed] {order}

[ numerically | {in} [numeric | numerical] {order} ]

[ chronologically | {in} [dateTime | chronologic | chronological] {order} ]

[alphabetically | {in} [ text | alphabetic | alphabetical] {order} ]

[with | considering] case

[without | ignoring] case

例:

sort nameList

sort ascending items delimited by tab of phoneList

例:

sort the lines of file "scores" numerically \

in reverse order by the last item of each

例:

sort the first 7 items of deck by each rank

sort jobs by (city of each, salary of each)

put jobs sorted by (city of each, salary of each) into sortedJobs

put (99,3,2,5,32,36,45737,26) sorted -- (2,3,5,26,32,36,99,45737)

put randomList sorted as lines in ascending order into sortedList

技術トピック

sortコマンドの一部として、いくつかのオプションを指定することができます。 containerToSortオプションのみ必須となります。 その他のオプションは任意で使用でき、ソート順と比較タイプを1つずつしか指定できないとはいえ、任意の順番で指定できます。

chunkTypesを指定する場合は、ソートはcontainerToSort内のそのタイプのチャンク(文字、単語、テキストアイテム、行、またはリストアイテム)上で実行されます。 指定しない場合は、コンテナのアイテム(リストの場合はリストアイテム、そうでない場合はテキストアイテム)がソートされます。 区切り文字は、アイテム、行または単語に対して指定できます。

ascendingまたはdescending(またはreversed)を指定する場合は、ソートの結果は、値が増加または減少する順序でそれぞれ並べ替えられます。 この順序を指定しない場合は、ソートは昇順で行われます。

ソート内で比較タイプを使用する場合は、それが数値、アルファベット順または時系列であるかどうかに関わらず、複数の異なる方法で指定できます。 比較タイプを指定しない場合は、コンテナは大文字と小文字を区別せずに、テキスト値を比較してソートされます。

numericallyまたはそのいずれかのバリエーションを指定する場合は、値はその数値に基づきソートされます。 chronologicallyまたはそのいずれかのバリエーションを指定する場合は、値は所定の日付の特定の時間として評価され、ソートされます。 特定の時間を持たない日付の場合は、その日付の正午として処理されます。 日付を持たない時間の場合は、現在の日付(本日)を参照していると仮定されます。

alphabeticallyまたはそのいずれかのバリエーションを指定する(または比較タイプを指定しない)場合は、considering caseignoring caseを指定して、比較時に大文字と小文字を区別するかどうかを指定できます。

最後に、 by sortByExprを指定する場合は、その他の任意のオプションの後、コマンドの末尾に使用する必要があります。 sortByExprは通常、ソートされる各要素を参照する特別な変数eachを含む式として表されます。

例えば、スクリプト内の変数nameListにスペースで区切られた名前と苗字で構成される人名リストが含まれる場合は、sort the items of nameListは、リストを各人のフルネームのアルファベット順にソートし、名前順のリストにします。 しかし、コマンドをsort the items of nameList by the last word of eachとすると、リストは苗字順でソートされます。

ソートされる2つ以上の要素が同一の値を有する場合は、sortコマンドはその順番をそのままにしておきます。 これにより、複数のsortコマンドが連続で使用され、サブソートが行われます。 最終的なソートによって結果の主な順序が決定されるため、ソート演算はサブソートから始めて、逆順で実施する必要があることに注意してください。 例えば、人を表すオブジェクトのリストで、各オブジェクトがfirstName lastName プロパティの両方を有する場合は、これらは以下のコードで苗字順にソートされ、同じ苗字がある場合は名前でソートされます。

sort people by the firstName of each

sort people by the lastName of each

各レベルのソートを同じ順序(昇順または降順)で行うという制限付きでサブソートを行う方法には他にも、主要素から始めて、要素のリストごとにソートするという方法があります。

sort people by (the lastName of each, the firstName of each)

splitコマンドとsplit()関数

挙動:splitコマンドは、指定された区切り文字でテキストを区切ることで、テキストを値のリストまたはキーと値のプロパティリストに分割します。 ソース値がコンテナの場合は、本コマンドの結果として、そのコンテナはリスト(またはプロパティリスト)となります。 ソース値がコンテナではない場合は、変数itが、ソース値の分割によって生じるリスト(またはプロパティリスト)を受け取ります。

関数として呼び出す場合は、式の一部として使いやすくするために、splitは結果のリストまたはプロパティリストを返します。

コマンド構文:

split sourceText {[by | using | with] listDelimiter {and keyDelimiter}}

関数構文:

split ( sourceText {, listDelimiter {, keyDelimiter}} )

例:

split "apple;banana;orange;cherry" by ";"

put it -- (apple,banana,orange,cherry)

例:

put "x=7;y=2" into coordinate

split coordinate using ";" and "="

put coordinate -- (x:7, y:2)

例:

split "a/2, b/15, a/9" by ", " and "/"

put it -- (a:(2,9), b:15)

例:

put split(filePath, "/") into pathComponents

技術トピック

sourceTextがコンテナ(変数)の場合は、その変数はsplit演算の結果を含むリストまたはプロパティリストとなります。 それ以外の場合は、変数itが結果のリストまたはプロパティリストを受け取ります。

listDelimiterのみ指定し、keyDelimiterは指定しない場合は、結果はリストとなり、リストアイテムを得るためにlistDelimiterのオカレンスごとにsourceTextが分割されます。 keyDelimiterlistDelimiter の両方を指定する場合は、結果はプロパティリストとなり、各エントリを区切るのにlistDelimiter、各キーとエントリ内の値を区切るのにkeyDelimiterが使用されます。 listDelimiter keyDelimiterのどちらも指定しない場合は、区切り文字としてitemDelimiterプロパティの現在の値が使用され、sourceTextがリストに分割されます。

プロパティリストの作成時にsourceText内で同じキーが2回以上生じる場合は、そのキーに関連付けられる値は、そのキーが検出されたすべての値を含むリストとなります(上記の最後の例を参照)。

関連:

standardFormat()関数

挙動:standardFormat関数は、アーカイブに適したフォーマットで、任意の値のテキスト表現を返します。 任意のタイプの値において、本関数はパラメータとしてvalue()関数に使用できるテキスト値を返し、元の値を取り出します。

構文:

{the} standardFormat of factor

standardFormat(expr)

例:

put standardFormat(97) -- "97"

例:

put the standardFormat of (1,"cow",2+3) -- {"1", "cow", "5"}

例:

put standardFormat of(name:Jack, age:17) -- {age:"17", name:"Jack"}

例:

put standardFormat(Jack & return & Jill) -- "Jack" & return & "Jill"

例:

put standardFormat(Jack & quote & Jill) -- Jack"Jill

技術トピック

一般的に、standardFormat()は値の「標準的」な引用を行い、リスト、プロパティリストおよびツリーに対する標準フォーマットの使用を強制します。 ただし、正確なフォーマットはSenseTalkのバージョンによって異なる可能性があり、現在の値の内部表現などその他の因子によっても変化する場合があるため、本関数で返される値を信頼して常に特定のフォーマットとしないようにしてください。 なお、value(standardFormat(someValue))someValueが等価であるということは、常に真である必要があります。

関連:値の変換におけるthe defaultQuoteFormatthe listFormatおよびthe propertyListFormatグローバルプロパティ。

text()asText() 関数

挙動:text関数(またはasText関数)は、そのパラメータ値をテキストフォーマットで返します。

構文:

{the} text of factor

text(expr)

例:

set the numberFormat to "00000"

例:

put (4 * 13)'s text into formattedNumber --"00052"

関連:

textDifference()関数

挙動:2つの語または語句間の「レーベンシュタイン距離」を計算します。 これは、2つのテキスト文字列が互いにどれほど異なるかを測定する方法です。 2つの値が等しい場合は、それらのtextDifferenceはゼロとなります。 1つの文字を別の文字に変更するか、挿入または削除して、1つの文字列を別の文字列に変更する場合は、その差異は1となります。 数字が大きくなればなるほど、2つの文字列間の違いが大きいことが示されます。 返される最も大きな数はより長い方の文字列の長さであり、これが返された場合は、2つの文字列が全く異なることが示されます。 本関数は、caseSensitiveグローバルプロパティがtrueに設定されていない限り、大文字と小文字を区別しません。

構文:

textDifference(string 1, string 2)

例:

put textDifference("Hobbit", "habit") -- 2

例:

put textDifference("Hobbit", "hobo") -- 3

例:

put textDifference("cheeseburger", "squash") -- 10

trim()trimStart()trimEnd()trimAll() 関数

挙動:テキスト値から先頭と末尾の空白(またはその他の文字)を削除します。 これらの関数は、1~2個のパラメータを使用します。 最初のパラメータは、トリムされるソーステキスト値となります。 2番目(オプション)のパラメータは、ソーステキストから削除する文字セットを定義するテキスト文字列となります。 2番目のパラメータを省略する場合は、デフォルトで空白および改行文字がトリムされます。

trim関数は、ソーステキスト値の先頭と末尾から空白または特定の文字を削除します。

trimStart関数は、ソースの先頭のみから空白または特定の文字を削除します。

trimEnd関数は、ソースの末尾のみから空白または特定の文字を削除します。

trimAll関数は、ソーステキストのあらゆる場所からすべての空白または特定の文字を削除します。

構文:

[trim | trimstart | trimend | trimall] (textExpr, textExpr)

注:空白と特定の文字の両方を削除したい場合は、2番目のパラメータにおいて、文字セットに空白を含める必要があります。

例:

put trim(" my words ")-- "my words"(2番目のパラメータがないため、ソースの先頭と末尾から空白が除去されます)

例:

put trim(" my words ", "ms ") -- "y word"(文字mとs、および空白がソースの先頭および/または末尾で検出された場合に除去されます)

例:

put trimStart(" my words ") -- "my words "(ソースの先頭から空白が除去されます)

例:

put " my words ".trimEnd("ms ") -- " my word"(文字mとs、および空白がソースの末尾で検出された場合に除去されます)

例:

put trim("mississippi", "i") -- "mississipp"(文字iがソースの先頭および/または末尾で検出された場合に除去されます)

例:

put trimall("mississippi", "i") -- "msssspp"(ソースからすべての文字iが除去されます)

union()関数

挙動:union関数は、リスト1のすべての値とリスト2のすべての値を含むリストを返します。 重複する値は、最終的なリストからすべて削除されます。

構文:

the union of [リスト1] and [リスト2]

例:

put ("carrots","bananas","pistachios","lettuce","wasabi","aspirin","tissues") into GroceryList

put ("cat food","tissues","aspirin","soda","socks") into TargetList

put the union of GroceryList and TargetList // (carrots,bananas,pistachios,lettuce,wasabi,aspirin,tissues,cat food,soda,socks)

uniqueItems() 関数

挙動:uniqueItems関数は、重複値を除いたlistValueのすべての一意の値を含むリストを返します。

構文:

the unique items of [listValue]

uniqueItems (listValue)

例:

put ("carrots","bananas","pistachios","lettuce","wasabi","aspirin","tissues","carrots","pistachios") into GroceryList

put uniqueItems (GroceryList) // (carrots,bananas,pistachios,lettuce,wasabi,aspirin,tissues)

uppercase()(またはtoUpper())関数

挙動:uppercase関数とこのシノニムのtoUpper関数は、すべて大文字に変換される式を返します。

構文:

{the} uppercase of stringFactor

uppercase(stringExpr)

例:

put uppercase ("Hi There") -- "HI THERE!"

関連:

 

This topic was last updated on 2月 01, 2019, at 11:13:23 午前.

Eggplant icon Eggplant.io | Documentation Home | User Forums | Support | Copyright © 2019 Eggplant