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

テキストとデータの操作

SenseTalkは強力なテキスト処理能力を持っています。ここで説明するChunk Expressionsというチャンク表現は、テキスト文字列の特定の部分にアクセスし、操作するための強力で直感的な手段を提供します。また、テキストに関する情報を取得したり、テキストと他のデータ形式との間で変換したり、高レベルでテキストを操作したりするための多数のコマンドと関数があります。これらのアクションを実行するためのコマンドと関数については以下で詳しく説明します。

Capitalized 関数

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

構文:
{the} capitalized of stringFactor
capitalized( stringExpr )

例:

put capitalized of "now and then" -- shows "Now And Then"

Related:

CharToNum Function

動作: その引数の最初の文字を表す数値コード(Unicode)を返します。

構文:
{the} charToNum of textFactor
charToNum( textExpr )

例:

put charToNum("a") -- 97

Related:

Delete コマンド

動作: deleteコマンドは、コンテナ内のテキストチャンクまたはターゲットテキスト文字列の1回以上の出現を削除します。最もシンプルな形では、大文字小文字を問わずターゲットテキストのすべての出現を削除します。他の形式では、位置によるチャンクの指定、ターゲット文字列の出現回数や特定の出現を削除するための指示、正確な大文字小文字のマッチングの指定が可能です。

チャンクの削除

この形式のdeleteコマンドは、値の中から任意のテキストチャンク(文字、単語、行、テキストアイテム)を削除します。削除すべきコンテナの部分を記述するチャンク表現でチャンクを指定することができます。詳細はChunk Expressionsをご覧ください。

構文:
delete chunk [of | in] container

例:

set sentence to "In a hole in the ground there lived a hobbit."
delete words 2 to 4 of sentence
put sentence —> "In the ground there lived a hobbit."

例:

delete the first 2 characters of line 15 of output

例:

delete the first line of file manual

テキストまたはパターンの削除

この形式のdeleteコマンドは、文字列内からターゲットテキスト値またはパターン(Pattern Language参照)を削除します。この形式のdeleteには、ターゲットの出現回数を指定する、あるいは特定の出現を削除するための指示をする、および正確な大文字小文字のマッチングを指定するといった多数のバリエーションが含まれます。

_targetTextOrPattern_を定義するオプションの中からひとつだけが必要で、削除が行われるコンテナも必要です。大文字小文字のオプションは任意です。使用されるオプションは任意の順序で指定することができますが、各種類のオプションは一つしか指定できません。

構文:
delete {オプション}

オプション:

[in | within | from] コンテナ
{all {occurrences of} | every {occurrence of} } 対象テキストまたはパターン
{the} [first | last] いくつか {occurrences of} 対象テキストまたはパターン
{the} 序数項 {occurrence of} 対象テキストまたはパターン
occurrence 序数 of 対象テキストまたはパターン
[with | considering] case
[without | ignoring] case

例:

delete "#" from text —> これは"#"のすべての出現を削除します

例:

delete the last "s" in word 3 of sentence

例:

delete all <punctuation or whitespace> from phoneNumber

例:

delete every occurrence of "ugly" in manual

例:

put trim(" my words ")-- "my words" (二番目のパラメータがない場合、ソースの始まりと終わりの空白を削除)
Tech Talk

振る舞い: excludeItems 関数は、list1 からの値すべてを含むリストを返し、その中には list2 にも存在しない値も含まれます。デフォルトでは、この関数は caseSensitive プロパティの現在の設定に従います。

put ("a".."z" &&& "A".."Z" &&& "0".."9" &&& space) into CharstoKeep2-- 後で使用するために保持する文字を変数に入れます。'joined by empty'がないと、それらはリストとして保存されます。このリストがKeepCharactersに渡されると、テキスト文字列として解釈されます。その文字列には、角括弧、二重引用符、カンマを含むすべての文字が含まれます:'["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",0,1,2,3,4,5,6,7,8,9," "]'

構文: > [insert | push] expr {nested | item by item} [before | into | after] container

_ordinalTerm_または_ordinalNumber_が指定されている場合、_targetTextOrPattern_の単一の出現のみが削除されます。_ordinalTerm_は序数のような単一の単語である必要があります。例えば、firstsecondthirdなど、またはmiddle(またはmid)、penultimatelastanyのいずれかの用語です。_ordinalNumber_は数値に評価される式である必要があります。負の場合、deleteコマンドは_container_の末尾から逆に数えて削除するべき出現を決定します。

considering caseが指定されている場合、_targetTextOrPattern_と一致する<0>container</0>内の出現のみが削除対象とされます。デフォルトでは、大文字小文字を区別せずに_targetTextOrPattern_の出現を削除します。

deleteコマンドは、削除された出現回数を示す結果(the result関数によって返される)を設定します。

### 値を削除する {#delete-with-each}

位置による値の削除(例えば delete item 3 of myList)に加えて、リストから特定の値を削除することもできます。これは each 式を使用して行います。例えば、テキストから "at" の単語をすべて削除するには delete each word of myText which is equal to "at" と言います。削除する値は、each 式の where(または which または whose)句を使用して選択され、これにより高い柔軟性が提供されます。したがって、指定された値に等しいチャンクを削除するだけでなく、削除するアイテムを選択するためにほとんど任意の基準を使用することができます。 {[--gt--]} Syntax:

コマンド構文:
split sourceText {[by | using | with] listDelimiter {and keyDelimiter}}

例:

delete each item of addressList whose zip code is 80202

関連:

delete each line of testCases where the last item of each is "failed"

例:

delete each item of scores which is equal to zero

関連:

delete each line of file "entries" which is empty

関連:

delete each item of subscriberList whose expirationDate is earlier than yesterday

Related:

ExcludeItems 関数

パラメータ: beyondPosition, caseSensitive, および reverse パラメータはオプションで、target 文字列または値(検索対象)と source 文字列またはリスト(検索範囲)だけが必要です。

Syntax:
the items of list1 excluding those in list2
excludeItems( list1, list2 )

例:

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]

Related:

Format関数

振る舞い: Format 関数は、テンプレート文字列に定義された任意の数の値のフォーマットされたテキスト表現を返します。テンプレートは、定義された数の小数点でフォーマットされた数値、定義された最小長を満たすための余分なスペースでフォーマットされたテキスト値などを指定する特別なフォーマットコードとテキストが混在しています。

Syntax:
format( template, value1, value2, ... )

例:

set interestRate to 5.457
put format("The interest rate is %3.2f %%", interestRate) --> The interest rate is 5.46 %

例:

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

例:

format("%x", maskValue) -- converts maskValue to hexadecimal
Tech Talk

template 文字列は、下記の要約のように、標準的なUnix printfコマンドがサポートする任意の形式コードを含むことができます。さらに、バックスラッシュ文字で始まる特定の「エスケープシーケンス」が以下のように変換されます:\e — エスケープ文字; \a — ベル文字; \b — バックスペース文字; \f — フォームフィード文字; \n — 改行文字; \r — キャリッジリターン文字; \t — タブ文字; \v — 垂直タブ文字; \’ — シングルクォート文字; \\` — バックスラッシュ文字;\num` — ASCII値が1-, 2-, または3桁の8進数 num の文字。

形式コードはパーセント記号 (%) で始まり、その値の長さと小数点以下の桁数を示すオプションの修飾子に続き、フォーマットの種類を指定する文字 (d, i, u, o, x, X, f, e, E, g, G, b, c, s, a, A, または @) で終わります (下表参照)。パーセント記号が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
c
s
b
a または A
@通常のテキスト形式で表示される任意の値

Related:

GloballyUniqueString 関数

動作:globallyUniqueString関数は、それが呼ばれるたびにユニークな文字列を提供します。globallyUniqueString()を呼び出して、識別子、キー、またはファイル名として使用するユニークな文字列を取得します。その値は、システム、アプリケーションインスタンス、そして関数への個別の呼び出しでユニークです。

構文:
the globallyUniqueString
globallyUniqueString()

例:

put globallyUniqueString() into idString

例:

set part's code to the globallyUniqueString -- パートに一意の識別子を付与します

Insert コマンド, Push コマンド

**動作:**リストの終わり、またはリストの特定の項目の前または後ろに値または値のリストを挿入します。

構文:
textDifference( string1, string2 )

例:

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 コマンドはリストの末尾に値を追加します。pushpop コマンドはリストをスタックとして扱います。スタックにプッシュされたアイテムは、pop コマンドを使用して逆の順序で取得することができます。pushpull コマンドはリストをキューとして扱います。pull コマンドは push コマンドでキューに追加された順序でアイテムを一つずつ取得します。

Tech Talk

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

もし_container_がリストの特定のアイテム(例:insert x after item 2 of myList)として指定されている場合、beforeおよびafterオプションはそれぞれ、そのアイテムの前または後に新しい値をリストに挿入します。しかし、intoオプションは、その既存のアイテムが操作されるリストであるかのように扱います。それが単一の値であれば、それは新しい値を第二のアイテムとして持つリスト(メインリスト内にネスト)になります。ターゲットとなるアイテムがすでにネストされたリストである場合、新しい値はそのリストに挿入されます。

もし_container_がリスト内のアイテムの範囲として指定されている場合、beforeオプションは新しい値を範囲の最初のアイテムの前に挿入し、afterintoの両方のオプションは新しい値を指定された範囲の最後のアイテムの後に挿入します。

_source_がリストの場合、そのアイテムは_listDelimiter_をアイテム間で使用して結合されます。sourceがプロパティリストで、_listDelimiter_のみが与えられると、プロパティ値は_listDelimiter_を値間で使用して結合されます。_keyDelimiter_と_listDelimiter_の両方が与えられた場合、結果には各プロパティのキー(プロパティ名)がその値の前に、_listDelimiter_を使用して各エントリを区切り、_keyDelimiter_を使用してエントリ内の各キーをその値から区切ります。

insertコマンドは宛先コンテナの何も取り除かず、また置き換えません。何かがそれに挿入されたとき、コンテナは常にリストになります、それが最初に空であったか、または未定義であったとしても。

Intersection Function

振る舞い: intersection関数は_list1_からのすべての値を含むリストを返し、それらの値は_list2_にも存在します。重複する値は最終的なリストから削除されます。デフォルトでは、この関数は現在のcaseSensitiveプロパティの設定に従います。

構文:
{the} intersection of list1 [and | with] list2
intersection( list1, list2 )
{the} [common | shared] [items | values] of list1 [and | with] list2
{the} [items | values] (that are) [shared by | ((shared) in) common [to | between]] list1 [and | with] list2
{the} [items | values] [of | in] list1 (that are) (also) [shared by | ((shared) in) common [to | with] | (found) in] list2

例:

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]

Related:

Join Command, Join Function

振る舞い: joinコマンド(またはその同義語combine)は、リストのアイテムまたはプロパティリストのプロパティを、指定されたデリミタを使用して単一のテキスト値に結合します。ソース値がコンテナである場合、そのコンテナはこのコマンドの結果となるテキスト文字列を受け取ります。ソース値がnotコンテナである場合、変数itはソース値の要素を結合することで得られるテキストを受け取ります。with quotesオプションは各値を引用符で囲むために使用することができます。

関数として呼び出されると、join(またはcombine)は結合したテキスト値を返し、これは式の一部として便利に使用できます。

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

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

例:

join [1,2,3] using ":" -- note: the source value is not a container
put it -- 1:2:3

例:

combine [1,2,3] using ":" with quotes
put it -- "1":"2":"3"

例:

put [1,2,3] into numbers -- start with a list in a container
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 -- only 1 delimiter
put it -- "12"##"5"
Tech Talk

_source_がコンテナ(変数)である場合、その変数はjoin操作の結果でテキスト値になります。そうでない場合、変数itが結果テキストを受け取ります。

もし_expr_が単一のアイテムではなくアイテムのリストを生成する場合、そのリストはnestedオプションが指定されていた場合はネストされたリストとして一括で挿入されます。item by itemが指定されている場合はそのリストからの各アイテムが個別に宛先リストに挿入されます。どちらのオプションも指定されていない場合、挿入のタイプはローカルプロパティthe listInsertionModeが“nested”または“item by item”に設定されている場合、またはthe defaultListInsertionModeグローバルプロパティによって制御されます。これは初期に“item by item”に設定されています。

_listDelimiter_も_keyDelimiter_も指定されていない場合、_source_のアイテムまたはプロパティはテキスト文字列に結合され、the listFormat.Separatorthe propertyListFormat.EntrySeparator、およびthe propertyListFormat.KeySeparatorプロパティの現在の値を適切に使用します。これはネストしたリストとプロパティリストにも適用されます。

using quotesまたはwith quotesが指定されている場合、各値は引用符で囲まれます。_quotes_値が提供されている場合、それは標準のダブルクォートマークの代わりに使用されます。_quotes_がリストである場合、最初のアイテムは各値の前に、2番目のアイテムは各値の後に使用されます。

関連記事:

KeepCharacters 関数

振る舞い: テキストからすべての文字を削除し、英数字または指定した別の文字セットのみを残します。この関数は1つまたは2つのパラメータを取ります。最初のパラメータはフィルタリングされるソーステキスト値です。2つ目(オプション)のパラメータは、ソーステキスト内に保持される文字セットを定義するテキスト文字列です。2つ目のパラメータが指定されていない場合、デフォルトで文字と数字が保持されます。この関数は大文字と小文字を区別します。

構文:
keepCharacters( textExpr {, charactersToKeep} )

例:

// eとs以外のすべての文字を削除します :
put keepCharacters("SenseTalk", "es") --> ese

例:

この例では、joined by emptyKeepCharactersによってすべての文字が予想通りに解釈されることを保証するために使用される方法を示しています。

// この行では、後でKeepCharacters関数に渡すために保持する文字を変数に格納します。
// '空'を使用するため、テキスト文字列として格納されます。
// 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 '
put ("a".."z" &&& "A".."Z" &&& "0".."9" &&& space) joined by empty into CharstoKeep1

// これは、後で使用するために保持する文字を別の変数に格納します。
// '空'を使用しないと、リストとして保存されます。このリストがKeepCharactersに渡されると、テキスト文字列として解釈されます。
// その文字列には、角かっこ、二重引用符、コンマを含むすべての文字が含まれています。
// '["a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z",0,1,2,3,4,5,6,7,8,9," "]'
put ("a".."z" &&& "A".."Z" &&& "0".."9" &&& space) into CharstoKeep2

// CharstoKeep1をテキスト文字列として渡します。
put keepCharacters("Se@n[se-Ta^lk is, a gr*e]at l$angu~ag)e...!", CharstoKeep1) --> 'SenseTalk is a great language'

// CharstoKeep2(リスト)を渡し、KeepCharactersがそれを文字列として解釈します。
put keepCharacters("Se@n[se-Ta^lk is, a gr*e]at l$angu~ag)e...!", CharstoKeep2) --> 'Sen[seTalk is, a gre]at language'

put keepCharacters("Se@n[se-Ta^lk is, a gr*eat l$ang]u#ag)e...!", CharstoKeep2) -- CharstoKeep2(リスト)を渡すと、KeepCharactersはそれを文字列として解釈します。出力:'Sen[seTalk is, a great lang]uage'

"$"を12回繰り返す -- "$$$$$$$$$$$$"

構文:
{the} text of factor
text( expr )

例:

```sensetalk 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関数

動作: lowercase関数は、すべて小文字(非大文字)に変換した表現を返します。

Syntax:
{the} lowercase of stringFactor
lowercase( stringExpr )

ノート

toLower()lowercase()関数の同義語で、同じ構文で使用できます。

例:

put "HELLO".toLower // Shows "hello"

例:

put lowercase of "Hi There!" // Shows "hi there!"

Related:

Merge関数

動作: ソーステキストをスキャンし、マージデリミッタで囲まれた表現の評価と置換を実行し、マージしたテキストを返します。標準的なマージデリミッタは二重の角括弧([[]])です。ソーステキスト内にある[[ と ]]で囲まれた任意の表現は、その値に置換されます。表現は現在のコンテキストで評価され、したがってマージ表現内の任意のローカルまたはグローバル変数は、マージ関数を呼び出したハンドラでの値と同じになります。

シンプルな表現に加えて、マージデリミッタ間のテキストには任意のSenseTalkステートメントを含めることができます。これは、テキストの部分に対して繰り返しループを含めるようなことに対して非常に強力になることがあります。

最後の二つのパラメータは任意で、source 文字列だけが必要です。もし delimiter1delimiter2 が指定されていたら、それらはマージデリミッタとして“[[”と“]]”の代わりに使われます。もし delimiter1 だけが指定されていたら、その値は開始と終了デリミッタの両方として使われます。もし the evaluationContext グローバルプロパティが Global または Universal に設定されていたら、マージプロセス中に変数はローカルではなくグローバルまたはユニバーサルとして扱われます。

! は、merge関数を呼び出すためのショートハンドとして引用符前に使うことができます。

Syntax:
merge( source {, delimiter1 {, delimiter2}} )
!" source "

例:

put "Jorge" into name
put merge("Hello [[name]], how are you?") -- 表示 "こんにちは Jorge, お元気ですか?"

例:

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]]"
-- ネコ

ウサギ

例:

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

例:

put "September" into monthName
put !"今月は [[monthName]]です" -- "今月は9月です"

Number of Operator

Behavior: この演算子は、ofの前にリテラル数値が必要であり、変数ではない。この演算子は数値や単位の分数に有用です。もし値が数値またはリストなら、それは数値で掛け算されます。そうでなければ、of演算子はそれを繰り返し演算子のように繰り返します。

Syntax:
fraction of aUnit
literalNumber of text {as {a} list}
literalNumber of numberOrList {as {a} list}

例:

put three hundredths of an inch -- 0.03 inches

例:

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 Function

Behavior: 指定された数値コード(Unicode)に対応する文字を返します。

Syntax:
{*the} numToChar of numFactor
numToChar( numExpr )

例:

put numToChar(97) -- "a" を表示します。

Related:

Offset, Range, EveryOffset, EveryRange Functions

Behavior: offset関数は、ソーステキスト内のターゲットテキストのオフセット位置、またはソースリスト内のターゲット値または値のリストのオフセットを返します。range関数も同様に動作しますが、ソース内でターゲットが見つかる範囲(開始位置と終了位置)を返します。検索対象のターゲット値がソース内に見つからない場合、0(オフセットの場合)または空の範囲0から0が返されます。offsetまたはrangeへのオプションパラメータは、特定のポイントを超えて部分文字列の出現を見つけるため、検索が大文字小文字を区別するかどうかを制御し、ソース文字列の終わりから逆方向に検索するために使用できます。オプションパラメータlocationpositionは、offsetまたはrange関数でafterまたはbeforeに続きます。

パラメータ: 必要に応じて、変数に格納する値を指定できます。

beyondPosition が指定されている場合、検索はその位置を超えたソース文字列(またはソースリスト)の次の文字から開始します。ソースの始まりから検索するためには、値を0(デフォルト)にする必要があります。関数が返す値は常に、ターゲット文字列がソース文字列内で見つかった位置(または範囲)、または見つからなかった場合は0です。beyondPosition が負の数として与えられた場合、それはソースの終わりに対する相対位置を示します。この場合、戻り値もソースの終わりからのオフセットを示す負の数として与えられます。

caseSensitive パラメータ(指定されている場合)は true または false に評価されるべきです。それが真であれば、検索は完全なケース一致のみを見つけます。デフォルト(指定されていない場合)は false です。自然な構文が使用される場合、considering case が指定されている場合は検索はケースセンシティブになり、ignoring case が指定されている場合はケースインセンシティブになります。デフォルトは、ケースの違いを無視することです。

reverse パラメータ(指定されている場合)は true または false に評価されるべきです。自然な構文で before を使用することは、reverse を true に設定することと同等です。それが真であれば、ソースの終わりから(または beyondPosition の前の文字から)逆方向の検索が行われ、始まりに向かって検索します。デフォルト(指定されていない場合)は false です。

everyOffsetおよびeveryRange関数は、それぞれの単一の対応する関数と同じように動作しますが、ソース内でターゲットが見つかるすべてのオフセットまたはすべての範囲のリストを返します。

これらの関数のすべては、直接呼び出すよりも、自然な英語風のフレーズを使用して最も一般的に呼び出されます。自然なものは、オフセットまたは範囲の式を英語風のフレーズとして書くためにも利用できます。

Options:
[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

offset( target, source, beyondPosition, caseSensitive, reverse )
range( target, source )
range( target, source, beyondPosition, caseSensitive, reverse )
everyOffset( target, source )
everyOffset( target, source, beyondPosition, caseSensitive, reverse )
everyRange( target, source )
everyRange( target, source, beyondPosition, caseSensitive, reverse )

例:

put offset("the", "Hi there!") -- 4
put range("the", "Hi there!") -- 4 to 6
put the range of "the" in "Hi there!" -- 4 to 6

例:

get every offset of "eggs" within recipe

例:

put offset ("th", "Hi there, from Thoughtful Software.", 5, FALSE)
-- 16 ("th" matches "Th" in Thoughtful)

put offset("th", "Hi there, from Thoughtful Software.", 5, TRUE)
-- 0 (case-sensitive: not found, "th" does not match "Th"-- and search starts after the "th" in "there")

put offset of "th" within "Hi there, from Thoughtful Software" \
after 5 considering case -- 0 (same as above, using natural syntax)

put offset of "th" within "Hi there, from Thoughtful Software" \
before end -- 16 (backwards search)

put every offset of "th" within "Hi there, from Thoughtful Software" \
before end -- (16,4)

例:

put every offset of ssn in textblock into ssnList // Finds the offset of all occurrences of ssn pattern match in textblock and places those positions into the ssnList list
set ssn to <3 digits then dash then 2 digits then dash then 4 digits>
put every offset of ssn in textblock into ssnList

例:

put the range of "cat" in "concatenation" into catRange
put catRange-- 4 to 6
put chars catRange of "concatenation" -- "cat"

例:

put the range of (c,d,e) in (a,b,c,d,e,f,g) -- 3 to 5
put the range of (c,d,e) in (a,b,c,d,X,e,f,g) -- 0 to 0```

例:

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

Pop コマンド

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

パラメータ:

Syntax:
pop stackList into variable
pop item number of stackList into variable

例:

put ["dog","cat","armadillo"] into Animalia
push "hedgehog" into Animalia
put Animalia --> ["dog","cat","armadillo","hedgehog"]
pop Animalia into Pets
put Pets // Returns "hedgehog"
put Animalia --> ["dog","cat","armadillo"]
put ["dog","cat","armadillo"] into Animalia
push "hedgehog" into Animalia
put Animalia --> ["dog","cat","armadillo","hedgehog"]
pop item two of Animalia into Pets
put Pets // Returns "cat"
put Animalia --> ["dog","armadillo","hedgehog"]
ノート

push および pop コマンドはリストをスタックとして扱います。スタックにプッシュされたアイテムは、pop コマンドを使用して逆の順序で取得できます。

Related:

Pull コマンド

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

パラメータ: 必要に応じて、変数に格納する値を指定できます。

Syntax:
pull from queueList into variable
pull item number of queueList into variable

例:

put ["dog","cat","armadillo"] into Animalia
push "hedgehog" into Animalia
put Animalia --> ["dog","cat","armadillo","hedgehog"]
pull from Animalia into Pets
put Pets //Returns "dog"
put Animalia --> ["cat","armadillo","hedgehog"]
put ["dog","cat","armadillo"] into Animalia
push "hedgehog" into Animalia
put Animalia --> ["dog","cat","armadillo","hedgehog"]
pull item three of Animalia into Pets
put Pets // Returns "armadillo"
put Animalia --> ["dog","cat","hedgehog"]
ノート

push および pull コマンドはリストをキューとして扱います。pull コマンドは、push コマンドによってキューに追加された順序でアイテムを一つずつ取得します。

Related:

Replace コマンド

挙動: replace コマンドは、コンテナ内の古い(ターゲット)テキスト文字列の1つまたは複数の出現を、新しい(置換)テキスト文字列に置き換えます。最も単純な形式では、古いテキストのすべての出現を新しいテキストに置き換えます。より高度なオプションでは、古いテキストのどの出現を置き換えるか、特定の出現を示すか、および正確なケース一致を指定することができます。

Syntax:
replace Options

オプション:
as chunkTypes // sorted操作子のみ
{{the} {[first | last] count} chunkTypes of } ソートするコンテナ // 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

例:

"Johnson"を"Johansson"に置き換える bigReport

例:

単語3の最後の"s"を空に置き換える

例:

マニュアル内の" he "のすべての出現を" she "に置き換える

例:

フレーズ内の最初の2つの"i"をケースを考慮して"I"に置き換える
Tech Talk

replace コマンドの一部として指定しなければならないオプションがいくつかあります。 oldTextnewText の両方が必要であり、置換が行われる container も必要です。他のオプションはオプションです。オプションは任意の順序で指定することができますが、各タイプのオプションは一つだけ与えることができます。

in container または within container オプションを任意の replace コマンドに含める必要があります。 container は任意のコンテナを指定することができ、変数、変数の一部(チャンク表現を使用)、テキストファイルなどが考えられます。 container が変数である場合、その内容はリストやプロパティリストを含む任意の種類のものであることができます。 replace コマンドはそのようなコンテナ内でネストしたすべての値のテキストを置き換えます。

with newText または by newText オプションを含めて、コンテナ内の古いテキストの選択された出現部分に代わる新しいテキストを供給する必要があります。

replace コマンドで置き換えるものを指定するための oldText のオプションを一つ含める必要があります。単に oldText の表現を提供すると、コマンドはその表現の値のすべての出現をコンテナ内で見つけ出し、それぞれを newText の値に置き換えます。好みに応じて all {occurrences of} または every {occurrence of}oldText を前置することもできます。

first または last のオプションが使用される場合、 howManycontainer の始まりまたは終わりからそれぞれ置き換えるべき oldText の出現数を指定します。

ordinalTermordinalNumber が与えられた場合、 oldText の出現は一回だけ newText に置き換えられます。 ordinalTerm は序数(firstsecondthirdなど)または middle(または mid)、penultimatelastany のいずれかの用語であるべきです。 ordinalNumber は数値に評価される表現であるべきです。負の場合、 replace コマンドは container の終わりから逆算して、どの出現を置き換えるかを決定します。

considering case が指定された場合、 container 内で完全に一致する oldText の出現だけが置き換えの対象となります。デフォルトでは、大文字小文字を問わずに一致します。

replace コマンドは、置き換えられた出現の数を示す結果を設定します( the result 関数によって返されます)。

関連: Chunk Expressions テキストの部分を置き換える他の方法について。

Repeated 演算子

動作: 指定した回数、指定した長さまでテキストを繰り返した文字列を作成する、または繰り返したリストを作成する。

Syntax:
text repeated number times
value repeated number times as a list
text repeated to length number
a list of value repeated number times

例:

"$"を6回リストとして繰り返す -- ["$","$","$","$","$","$"]

例:

"Hello"を長さ12まで繰り返す -- "HelloHelloHe"

例:

put "$" repeated 6 times as a list --> ["$","$","$","$","$","$"]

例:

7のリストを3回繰り返す -- [7,7,7]

Reverse コマンド、 Reverse 関数

動作: reverse コマンドは、文字列の文字の順序、リストの項目、または範囲を逆にします。逆にされる値がリストまたは範囲でない場合、それは文字列として扱われ、その文字が逆にされます。逆にされる値が変数や他のコンテナである場合、コンテナの内容はその場で逆にされます。それ以外の場合、逆にされた値は変数 it に格納されます。

関数として呼び出されたとき、 reverse は、結果となるリスト、範囲、または文字列を返し、式の一部として便利に使用できます。

ノート

ステップ増分が1以外の範囲を反転させると、結果の範囲は元の範囲の終端値とは異なる開始値を持つ可能性があります。これは、範囲をリストとして扱う場合の一貫した動作を維持するためです。たとえば、リストとして扱われると、範囲10 .. 20 by 5はリスト[10,15,20]となります。この範囲を逆にすると、20 .. 10 by 5となり、リストでは[20,15,10]となります。しかし、リストとしての30 .. 42 by 5は[30,35,40]です。この範囲を反転すると、リストとして扱われると元のリストの逆、[40,35,30]を得るため、結果は40 .. 30 by 5(NOT 42..30 by 5)になります。

コマンド Syntax:
reverse stringRangeOrList
reverse {the} [words | lines | items] {delimited by delimiter} of aString

関数 Syntax:
reverse( stringRangeOrList )
{the} reverse of stringRangeOrList
stringRangeOrList reversed

例:

"alakazam"を逆順にする -—> "mazakala"

例:

100から200まで10刻みで逆順にする -—> 200から100まで10刻み

例:

["extreme", "high", "medium", "low", "trivial"]の逆順を取る -—> ["trivial","low","medium","high","extreme"]

例:

"all men are created equal"の単語を逆順にする
それを表示 —> "equal created are men all"

例:

ファイル "sonnet"の行を逆順にする

Related:

RTFToText 関数

動作: RTF形式のリッチテキストをプレーンテキストに変換します。richTextの値は、RTF形式でエンコードされたテキストである必要があります。rtfToText関数は、すべての書式設定情報を削除し、richTextからプレーンテキストの内容のみを返します。

Syntax:
{the} rtfToText of richText
rtfToText( richText )

例:

ファイル "Picasso.rtf"のrtfToTextをpicassoTextに入れる

Shuffle コマンド、 Shuffle 関数

動作: shuffle コマンドは、文字列の文字またはリストの項目をランダムな順序にします。シャッフルされる値がリストでない場合、それは文字列として扱われます。シャッフルされる値が変数や他のコンテナである場合、コンテナの内容はその場でシャッフルされます。それ以外の場合、シャッフルされた値は変数 it に格納されます。

関数として呼び出されたとき、 shuffle は結果となるシャッフルされたリストまたは文字列を返し、式の一部として便利に使用できます。

Command Syntax:
shuffle 文字列またはリスト
shuffle {the} [単語 | | 項目] {delimiterで区切られる} 文字列

Function Syntax:
shuffle( 文字列またはリスト )
{the} shuffle of 文字列またはリスト
文字列またはリスト shuffled
文字列またはリスト in {a} [shuffled | random] order

例:

1..6をシャッフルする —> [4,2,3,1,6,5]

例:

"we hold these truths to be self evident"の単語をシャッフルする
それを表示 —> "evident these truths hold we to self be"

例:

lotteryEntriesをシャッフルする

例:

["aardvark","bear","coyote","dingo","elephant"]をランダムな順序で表示する —> ["dingo","elephant","bear","coyote","aardvark"]

例:

shuffle("bluebeard")を表示 —> "ulberdeab"

Related:

Sort コマンド, Sorted 操作子

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

sorted 操作子は、値の内容をソートし、ソートされた値を生成します。これは、コンテナに格納したり、より大きな式の一部として使用したりできます。

構文:
sort {オプション} {by sortByExpr}
要素 sorted {オプション} {by sortByExpr}

オプション:
as chunkTypes     // Only for the sorted operator
{{the} {[first | last] count} chunkTypes of } containerToSort     // Only for the sort command
{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

例:

nameListをソートする
phoneListのタブで区切られた項目を昇順にソートする

例:

ファイル "scores" の行を数値で逆順にソートする \
各々の最後の項目による

例:

deckの最初の7項目をそれぞれのrankでソートする
jobsを[それぞれのcity, それぞれのsalary]でソートする
jobsを[それぞれのcity, それぞれのsalary]でソートし、sortedJobsに入れる
[99,3,2,5,32,36,45737,26]をソートする -- [2,3,5,26,32,36,99,45737]
randomListを行として昇順にソートし、sortedListに入れる
Tech Talk

sort コマンドには、いくつかのオプションを指定できます。_ソートするコンテナ_のみが必須です。追加のオプションは任意で、任意の順序で指定できますが、ソート順序と比較タイプは一つだけ指定できます。

_chunkTypes_が指定されている場合、ソートはそのタイプのチャンク(文字、単語、テキスト項目、行、リスト項目)に対して行われます。指定されていない場合、コンテナの項目がソートされます(リストの場合はリスト項目、テキストの場合はテキスト項目)。項目、行、単語にはデリミタを指定できます。

ascendingまたはdescending(またはreversed)が指定されている場合、ソートの結果は増加する値または減少する値によって配置されます。順序が指定されていない場合、ソートは昇順で行われます。

ソートに使用する比較タイプ(数値、アルファベット、時系列)は、いくつかの異なる方法で示すことができます。比較タイプが指定されていない場合、コンテナはテキストの値を比較してソートされ、大文字と小文字の区別は無視されます。

numericallyまたはその変形が指定されている場合、値はその数値に基づいてソートされます。chronologicallyまたはその変形が指定されている場合、値は特定の日付の特定の時刻として評価されてソートされます。具体的な時間が指定されていない日付はその日の正午として扱われます。日付が指定されていない時間は現在の日付(今日)を指しているとみなされます。

alphabeticallyまたはその変形が指定されている場合(または比較タイプが指定されていない場合)considering caseまたはignoring caseを指定することで、比較に大文字と小文字を考慮するかどうかを示すことができます。

最後に、by sortByExprが指定されている場合、それはコマンドの最後、他のすべてのオプションの後に来なければなりません。_sortByExpr_は通常、ソートされる各要素を参照する特別な変数eachを含む式です。

例えば、あなたのスクリプト中の変数nameListには、各名前が空白で区切られた名前と姓から成る人々の名前のリストが含まれているとすれば、sort the items of nameListは、各人の全名によってリストをアルファベット順にソートし、結果として名前順のリストを作り出します。しかし、sort the items of nameList by the last word of eachというコマンドは、姓の順序でリストをソートします。

ソートされる2つ以上の要素が同じ値を持っている場合、sortコマンドはその順序を変えません。これにより、複数のソートコマンドを順序で使用してサブソートを行うことが可能になります。ソート操作は逆順に行う必要があります。サブソートから始めて、最終的なソートが結果の主要な順序を決定するからです。例えば、firstNamelastNameのプロパティを持つ人物を表現するオブジェクトのリストがある場合、以下のコードは、姓でそれらを順序付けし、同じ姓のものは名でソートします:

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)

Related:

Splitコマンド, Split関数

挙動: splitコマンドは、指定されたデリミタでテキストを値のリスト、またはキーと値のプロパティリストに分割します。ソース値がコンテナである場合、そのコンテナはこのコマンドの結果としてリスト(またはプロパティリスト)になります。ソース値がコンテナでない場合、変数itはソース値を分割した結果として得られるリスト(またはプロパティリスト)を受け取ります。

関数として呼び出されると、splitは結果のリストまたはプロパティリストを返し、式の一部として便利に使用できます。

関数構文:
split( sourceText {, listDelimiter {, keyDelimiter}} )

Syntax:
offset( target, source )

例:

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
Tech Talk

_sourceText_がコンテナ(変数)である場合、その変数は分割操作の結果を含むリストまたはプロパティリストになります。そうでない場合、変数itが結果のリストまたはプロパティリストを受け取ります。

_listDelimiter_が指定されているが_keyDelimiter_が指定されていない場合、結果はリストとなり、_sourceText_を_listDelimiter_の各出現で分割してリスト項目を取得します。_keyDelimiter_と_listDelimiter_の両方が指定されている場合、結果はプロパティリストとなり、_listDelimiter_を使用して各エントリを分離し、_keyDelimiter_を使用してエントリ内の各キーとその値を分離します。_listDelimiter_も_keyDelimiter_も指定されていない場合、sourceTextはリストに分割され、デリミタとしてthe itemDelimiterプロパティの現在の値を使用します。

プロパティリストを作成する際に、同じキーが_sourceText_に複数回出現すると、そのキーに関連付けられた値は、そのキーに対して見つかったすべての値を含むリストになります(上記の最後の例を参照)。

関連:

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(Jack & quote & Jill) -- Jack"Jill

例:

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

例:

put standardFormat of{name:Jack, age:17} -- {age:"17", name:"Jack"}
Tech Talk

一般的に、standardFormat()は値の「標準」引用を行い、リスト、プロパティリスト、ツリーの標準形式の使用を強制します。しかし、この関数が返す値が常に特定の形式であることを期待しないでください。正確な形式は、SenseTalkのバージョンごとに変わることがあり、また、値の現在の内部表現など、他の要素にも依存することがあります。しかし、常にvalue(standardFormat(someValue))someValueと等しいことは真であるべきです。

関連:

Text, AsText 関数

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

構文:
{the} unique items of listValue
uniqueItems( listValue )

例:

set the numberFormat to "00000"
put (4 * 13)'s text into formattedNumber --"00052"

Related:

TextDifference 関数

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

構文: {the} uppercase of stringFactor> uppercase( stringFactor )

例:

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

例:

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

例:

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

Trim, TrimStart, TrimEnd, TrimAll 関数

挙動: テキスト値の前後の空白(または他の文字)を削除します。これらの関数は一つまたは二つのパラメータを取ります。最初のパラメータはトリミングされるソーステキスト値です。二つ目の(オプションの)パラメータはソーステキストから削除される文字のセットを定義するテキスト文字列です。二つ目のパラメータを省略した場合、デフォルトで空白と改行文字がトリムされます。

trim関数は、ソーステキストの値の始めと終わりから空白または指定された文字を削除します。

trimStart関数は、ソースの始めだけから空白または指定された文字を削除します。

trimEnd関数は、ソースの終わりだけから空白または指定された文字を削除します。

trimAll関数は、ソーステキストのどこかから全ての空白または指定された文字を削除します。

構文:
[trim | trimStart | trimEnd | trimAll]( textExpr {, charsToTrim} )
{the} [trim | trimStart | trimEnd | trimAll] of textExpr

ノート

空白だけでなく特定の文字も削除したい場合は、二つ目のパラメータの文字セットに空白を含める必要があります。

例:

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をすべて削除)

例:

put trim(" my words ", "ms ") -- "y word" (ソースの始まりと/または終わりにある場合、文字 m、s、および空白を削除)

例:

put keepCharacters("SenseTalk", "es") -- Removes all characters except for e and s.

関連:

振る舞い: union 関数は、list1 の全ての値と list2 の全ての値を含むリストを返します。最終的なリストからは重複した値が削除されます。デフォルトでは、この関数は caseSensitive プロパティの現在の設定に従います。

構文:
{the} union of list1 and list2
union( list1, list2 )

例:

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]

Related:

UniqueItems 関数

振る舞い: uniqueItems 関数は、listValue から全てのユニークな値を含むリストを返します。重複する値は全て削除されます。デフォルトでは、この関数は the caseSensitive プロパティの現在の設定に従います。

Syntax: {the} intersection of _list1 and list2
intersection( list1, list2 )

例:

put ["carrots","bananas","pistachios","lettuce","wasabi","aspirin","tissues","carrots","pistachios"] into GroceryList
put uniqueItems (GroceryList) // [carrots,bananas,pistachios,lettuce,wasabi,aspirin,tissues]

Related:

put keepCharacters("Se@n[se-Ta^lk is, a gr*eat l$ang]u#ag)e...!", CharstoKeep1) -- CharstoKeep1をテキスト文字列として渡します。出力:'SenseTalk is a great language'

振る舞い: uppercase 関数は、表現を全て大文字(大文字)に変換して返します。

自然な構文:
{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}

ノート

toUpper 関数は uppercase 関数と同義で、同じ構文で使用できます。

例:

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

Related: