テキストとデータの操作
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 {Options}
オプション:
[in | within | from] コンテナ
{all {occurrences of} | every {occurrence of} } targetTextOrPattern
{the} [first | last] howMany {occurrences of} targetTextOrPattern
{the} ordinalTerm {occurrence of} targetTextOrPattern
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" (二番目のパラメータがない場合、ソースの始まりと終わりの空白を削除)
振る舞い: excludeItems
関数は、list1 からの値すべてを含むリストを返し、その中には list2 にも存在しない値も含まれます。デフォルトでは、この関数は caseSensitive
プロパティの現在の設定に従います。
削除する内容を指定するには、削除コマンドに targetTextOrPattern オプションの 1 つを含める必要があります。_targetTextOrPattern式を指定するだけで、_container_内でその式の値が検出されるたびにコマンドによって削除 されるため、このオプションは慎重に使用してください。必要に応じて、必要に応じて、_targetTextOrPattern_の前にall {occurrences of}またはevery {occurrence of} を付けると、影響が明確になります。
構文: [insert | push] expr {nested | item by item} [before | into | after] container
_ordinalTerm_または_ordinalNumber_が指定されている場合、_targetTextOrPattern_の単一の出現のみが削除されます。_ordinalTerm_は序数のような単一の単語である必要があります。例えば、first
、second
、third
など、またはmiddle
(またはmid
)、penultimate
、last
、any
のいずれかの用語です。_ordinalNumber_は数値に評価される式である必要があります。負の場合、delete
コマンドは_container_の末尾から逆に数えて削除するべき出現を決定します。
considering caseが指定されている場合、targetTextOrPattern と 一致する container 内の出現のみが削除対象とされます。デフォルトでは、大文字小文字を区別せずに_targetTextOrPattern_の出現を削除します。
delete
コマンドは、削除された出現回数を示す結果(the result
関数によって返される)を設定します。
値を削除する
位置による値の削除(例えば delete item 3 of myList
)に加えて、リストから特定の値を削除することもできます。これは each 式を使用して行います。例えば、テキストから "at" の単語をすべて削除するには delete each word of myText which is equal to "at"
と言います。削除する値は、each 式の where(または which または whose)句を使用して選択され、これにより高い柔軟性が提供されます。したがって、指定された値に等しいチャンクを削除するだけでなく、削除するアイテムを選択するためにほとんど任意の基準を使用することができます。 {[--gt--]} [Syntax:](/epf/ja/23.4/stk-syntax-definition)
コマンド構文: delete each chunkType [of |in]sourceValue {where conditionWithEach |which operator value |そのpropertyCondition}
例:
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 文字列またはリスト(検索範囲)だけが必要です。
構文:
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
関数は、テンプレート文字列に定義された任意の数の値のフォーマットされたテキスト表現を返します。テンプレートは、定義された数の小数点でフォーマットされた数値、定義された最小長を満たすための余分なスペースでフォーマットされたテキスト値などを指定する特別なフォーマットコードとテキストが混在しています。
構文:
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
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つ連続 (%%
) すると、出力文字列にパーセント記号を出力することができます。
パーセント記号に続き、文字コードの前に、この値の出力長を示す数値を含む形式があるかもしれません。長さは、小数点 (.
) とその後に続く「精度」を示す別の数値に続くかもしれません。これは、数値の表示する小数点以下の桁数、または文字列から表示する最大文字数を示します。長さまたは精度は、その値が追加のパラメータから読み取られるべきであることを示すために、アスタリスク (*
) に置き換えられるかもしれません。
長さの前に、形式コードはまた、必要に応じて以下の修飾子コードを含むこともあります:
- マイEggplant記号 (-) は、値が指定された長さ内で左寄せになるべきことを示します
- プラス記号 (+) は、符号付き数値形式が正の数に対してプラス記号を表示するべきことを示します
- スペース ( ) は符号付き数値形式が正の数のために追加のスペースを含むべきことを示します
- ゼロ (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
| | 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
| 先頭に 0x(または 0X)と小数点の前に一つの 16 進数の数字を持つ科学表記で表示された符号付き数値。指数を示すために小文字の p(または大文字の P)を使用します(Windowsでは利用できません |
| @
| 通常のテキスト形式で表示される任意の値 |
Related:
GloballyUniqueString
関数
動作:globallyUniqueString
関数は、それが呼ばれるたびにユニークな文字列を提供します。globallyUniqueString()
を呼び出して、識別子、キー、またはファイル名として使用するユニークな文字列を取得します。その値は、システム、アプリケーションインスタンス、そして関数への個別の呼び出しでユニークです。
構文:
the globallyUniqueString
globallyUniqueString( { formatNumber } )
GloballyUniqueString は、通常、パラメーターなしで、またはパラメーター値 0 で呼び出されます。値が「1」の_formatNumberで呼び出された場合_、SenseTalkの古いバージョン(V2.13以前) と下位互換性があるが、RFC 4122標準に準拠していない形式で一意の文字列を返します。
例:
put globallyUniqueString() --> 95400D7C-35E8-47D0-9B72-F7854978D7A0
put globallyUniqueString(0) --> C9CF7512-07E8-4E14-8520-C251A08C3988
例:
set part's code to the globallyUniqueString // パートに一意の識別子を付与します
Hash
Function
動作:ハッシュ
関数は、指定されたデータのハッシュ値を返します。SenseTalkは、多くのハッシュタイプ(業界標準アルゴリズム) と複数の出力フォーマットをサポートしています。この関数は、選択したハッシュタ イプと指定された秘密鍵に基づいて、ハッシュベースのメッセージ認証コード(HMAC) を生成することもできます。
構文:
hash( {dateValue} )
hash( {dateValue, options} ) hash( optionsIncludingDataOrFile )
_options_または_optionsIncludingDataOrFile_は、次のプロパティを含むことができるプロパティ・リストです。
data
— ハッシュされるデータ値です。dataValue を指定しない場合は、data
またはfile
を指定する必要があります。data
— ハッシュされるデータ値です。dataValue を指定しない場合は、data
またはfile
を指定する必要があります。type
— 計算するハッシュのタイプです。デフォルト値は「sha256」です。key
— HMAC のキー文字列です。key
を含めると、SenseTalkは計算にHMACアルゴリズムを使用します。key
を省略すると、SenseTalkは単純なハッシュ値を計算します。output
— ハッシュ値の出力形式です。デフォルト値は「Hex」です。
タイプ
は、"sha1"、"sha256"、"sha384"、"sha512"、"sha3-224"、"sha3-256"、"sha3-384"、"sha3-512"、"md2"、"md5"、"ripemd128"、"ripemd160"、"ripemd256"、または "ripemd320" です。タイプ
を指定しない場合、SenseTalkはデフォルト値「sha256」を使用します。
出力
は、"Base64", "modBase64", "base64url", "Base32", "Base58", "UU", "QP" (quoted-printable の場合), "URL" (url-encoding の場合), "Hex", "Q", "B", "url_oauth", "url_rfc1738", "url_rfc2396", "url_rfc3986", "fingerprint" のいずれかになります。output
を省略すると、SenseTalkはデフォルト値の"Hex"を使用します。"hex"(小文字の"h"を含む) を指定すると、SenseTalkは大文字ではなく小文字の16進数文字列を返します。
例:
set sourceData to "Eggplant"
put hash(sourceData) --> 84247C8AAF6DD96FB2878483CB0140C23E3C12ABA8CC987306D0A77986286526
put hash(sourceData, type:"MD5") --> B2585BC3E070132D2BF51DFFAE794F64
put hash(data:sourceData, type:"MD5", output:"fingerprint") --> b2:58:5b:c3:e0:70:13:2d:2b:f5:1d:ff:ae:79:4f:64
例:
set myFile to the temp folder & "fileToHash.txt"
put “Eggplant” into file myFile
put hash(sourceData, type:"MD5") --> B2585BC3E070132D2BF51DFFAE794F64
例:
set sourceData to "The quick brown fox jumps over the lazy dog"
put hash(sourceData, key:"1234") --> 214E68BDD7C12D03971AAA929226147AFC786448D239CAEC7ECEB6A39ADC2BCF
put hash(sourceData, key:"eggplant") --> A9F52CABD3FBEC4CD73C2CBEF44D711100A433F8C755AA0D542772E71B98926D
put hash(data:sourceData, type:"sha1", key:"eggplant") --> 29ED9AC3D1EC500E0103C2E3AE9D9D900B7A7637
Insert
コマンド, Push
コマンド
**動作:**リストの終わり、またはリストの特定の項目の前または後ろに値または値のリストを挿入します。
構文:
[insert | push] 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
コマンドでキューに追加された順序でアイテムを一つずつ取得します。
insert
コマンドの構文を考慮すると、expr はその値が container に挿入される表現式です。before
が指定されている場合、新しい値はリストの先頭に挿入されます。after
が指定されている場合、新しい値はリストの末尾に挿入されます。into
が指定されている場合、新しい値は適切な位置(現在は常にリストの末尾)にリストに挿入されます。
もし_container_がリストの特定のアイテム(例:insert x after item 2 of myList
)として指定されている場合、before
およびafter
オプションはそれぞれ、そのアイテムの前または後に新しい値をリストに挿入します。しかし、into
オプションは、その既存のアイテムが操作されるリストであるかのように扱います。それが単一の値であれば、それは新しい値を第二のアイテムとして持つリスト(メインリスト内にネスト)になります。ターゲットとなるアイテムがすでにネストされたリストである場合、新しい値はそのリストに挿入されます。
もし_container_がリスト内のアイテムの範囲として指定されている場合、before
オプションは新しい値を範囲の最初のアイテムの前に挿入し、after
とinto
の両方のオプションは新しい値を指定された範囲の最後のアイテムの後に挿入します。
_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"
_source_がコンテナ(変数)である場合、その変数はjoin操作の結果でテキスト値になります。そうでない場合、変数it
が結果テキストを受け取ります。
もし_expr_が単一のアイテムではなくアイテムのリストを生成する場合、そのリストはnested
オプションが指定されていた場合はネストされたリストとして一括で挿入されます。item by item
が指定されている場合はそのリストからの各アイテムが個別に宛先リストに挿入されます。どちらのオプションも指定されていない場合、挿入のタイプはローカルプロパティthe listInsertionMode
が“nested”または“item by item”に設定されている場合、またはthe defaultListInsertionMode
グローバルプロパティによって制御されます。これは初期に“item by item”に設定されています。
_listDelimiter_も_keyDelimiter_も指定されていない場合、_source_のアイテムまたはプロパティはテキスト文字列に結合され、the listFormat.Separator
、the propertyListFormat.EntrySeparator
、およびthe propertyListFormat.KeySeparator
プロパティの現在の値を適切に使用します。これはネストしたリストとプロパティリストにも適用されます。
using quotes
またはwith quotes
が指定されている場合、各値は引用符で囲まれます。_quotes_値が提供されている場合、それは標準のダブルクォートマークの代わりに使用されます。_quotes_がリストである場合、最初のアイテムは各値の前に、2番目のアイテムは各値の後に使用されます。
関連記事:
KeepCharacters
関数
振る舞い: テキストからすべての文字を削除し、英数字または指定した別の文字セットのみを残します。この関数は1つまたは2つのパラメータを取ります。最初のパラメータはフィルタリングされるソーステキスト値です。2つ目(オプション)のパラメータは、ソーステキスト内に保持される文字セットを定義するテキスト文字列です。2つ目のパラメータが指定されていない場合、デフォルトで文字と数字が保持されます。この関数は大文字と小文字を区別します。
Syntax:
keepCharacters( textExpr {, charactersToKeep} )
例:
// eとs以外のすべての文字を削除します :
put keepCharacters("SenseTalk", "es") --> ese
例:
この例では、joined by empty
がKeepCharacters
によってすべての文字が予想通りに解釈されることを保証するために使用される方法を示しています。
// この行では、後で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} log2 of numFactor
asTime( {timeExpr} )
例:
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
関数は、すべて小文字(非大文字)に変換した表現を返します。
構文:
{the} capitalized of stringFactor
lowercase( stringExpr )
toLower()
はlowercase()
関数の同義語で、同じ構文で使用できます。
例:
put "HELLO".toLower // Shows "hello"
例:
put lowercase of "Hi There!" // Shows "hi there!"
Related:
Merge
関数
動作: ソーステキストをスキャンし、マージデリミッタで囲まれた表現の評価と置換を実行し、マージしたテキストを返します。標準的なマージデリミッタは二重の角括弧([[
と ]]
)です。ソーステキスト内にある[[ と ]]で囲まれた任意の表現は、その値に置換されます。表現は現在のコンテキストで評価され、したがってマージ表現内の任意のローカルまたはグローバル変数は、マージ関数を呼び出したハンドラでの値と同じになります。
シンプルな表現に加えて、マージデリミッタ間のテキ ストには任意のSenseTalkステートメントを含めることができます。これは、テキストの部分に対して繰り返しループを含めるようなことに対して非常に強力になることがあります。
最後の二つのパラメータは任意で、source 文字列だけが必要です。もし delimiter1 と delimiter2 が指定されていたら、それらはマージデリミッタとして“[[”と“]]”の代わりに使われます。もし delimiter1 だけが指定されていたら、その値は開始と終了デリミッタの両方として使われます。もし the evaluationContext
グローバルプロパティが Global
または Universal
に設定されていたら、マージプロセス中に変数はローカルではなくグローバルまたはユニバーサルとして扱われます。
!
は、merge
関数を呼び出すためのショートハンドとして引用符前に使うことができます。
構文:
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
演算子はそれを繰り返し演算子のように繰り返します。
構文:
fraction of aUnit
literalNumber of text {as {a} list} literalNumber of text {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)に対応する文字を返します。
構文:
{the} log2 of numFactor
numToChar( numExpr )
例:
put numToChar(97) -- "a" を表示します。
Related:
Offset
, Range
, EveryOffset
, EveryRange
Functions
Behavior: offset
関数は、ソーステキスト内のターゲットテキストのオフセット位置、またはソースリスト内のターゲット値または値のリストのオフセットを返します。range
関数も同様に動作しますが、ソース内でターゲットが見つかる範囲(開始位置と終了位置)を返します。検索対象のターゲット値がソース内に見つからない場合、0(オフセットの場合)または空の範囲0から0が返されます。offset
またはrange
へのオプションパラメータは、特定のポイントを超えて部分文字列の出現を見つけるため、検索が大文字小文字を区別するかどうかを制御し、ソース文字列の終わりから逆方向に検索するために使用できます。オプションパラメータlocation
とposition
は、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
関数は 、それぞれの単一の対応する関数と同じように動作しますが、ソース内でターゲットが見つかるすべてのオフセットまたはすべての範囲のリストを返します。
これらの関数のすべては、直接呼び出すよりも、自然な英語風のフレーズを使用して最も一般的に呼び出されます。自然なものは、オフセットまたは範囲の式を英語風のフレーズとして書くためにも利用できます。
構文:
offset( target, source )
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 )
everyOffset( target, source, beyondPosition, caseSensitive, reverse )自然な構文:
{the | every} offset of targetFactor [in | within] sourceFactor
{ [before | after] [ { position | location } beyondPosition | {the} end ] }
everyOffset( target, source )
{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 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
コマンドはリストの最後の値を削除し、それを変数に格納します。
パラメータ:
構文:
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
コマンドはリストの最初の値を削除し、それを変数に格納します。
パラメータ: 必要に応じて、変数に格納する値を指定できます。
構文:
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"]
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つまたは複数の出現を、新しい(置換)テキスト文字列に置き換えます。最も単純な形式では、古いテキストのすべての出現を新しいテキストに置き換えます。より高度なオプションでは、古いテキストのどの出現を置き換えるか、特定の出現を示すか、および正確なケース一致を指定することができます。
構文:
delete {Options
Options:
[in | within] container
{ all {occurrences of} | every {occurrence of} } targetTextOrPattern
{the} [first | last] howMany {occurrences of} targetTextOrPattern
{the} ordinalTerm {occurrence of} targetTextOrPattern
occurrence ordinalNumber of oldText
[with | by] newText
[with | considering] case
[without | ignoring] case
例:
"Johnson"を"Johansson"に置き換える bigReport
例:
単語3の最後の"s"を空に置き換える
例:
マニュアル内の" he "のすべての出現を" she "に置き換える
例:
フレーズ内の最初の2つの"i"をケースを考慮して"I"に置き換える
replace
コマンドの一部として指定しなければならないオプションがいくつかあります。 oldText と newText の両方が必要であり、置換が行われる 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
のオプションが使用される場合、 howMany は container の始まりまたは終わりからそれぞれ置き換えるべき oldText の出現数を指定します。
ordinalTerm や ordinalNumber が与えられた場合、 oldText の出現は一回だけ newText に置き換えられます。 ordinalTerm は序数(first
、second
、third
など)または middle
(または mid
)、penultimate
、last
、any
のいずれかの用語であるべきです。 ordinalNumber は数値に評価される表現であるべきです。負の場合、 replace
コマンドは container の終わりから逆算して、どの出現を置き換えるかを決定します。
considering case
が指定された場合、 container 内で完全に一致する oldText の出現だけが置き換えの対象となります。デフォルトでは、大文字小文字を問わずに一致します。
replace
コマンドは、置き換えられた出現の数を示す結果を設定します( the result
関数によって返されます)。
関連: Chunk Expressions テキストの部分を置き換える他の方法について。
Repeated
演算子
動作: 指定した回数、指定した長さまでテキストを繰り返した文字列を作成する、または繰り返したリストを作成する。
構文:
text repeated number times
text repeated number times
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)になります。
Command 構文: reverse stringRangeOrList
reverse {the} [words | lines | items] {delimited by delimiter} of aString
Function 構文:
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
からプレーンテキストの内容のみを返します。
構文:
{the} asObject of factor
rtfToText( richText )
例:
put the rtfToText of file "Picasso.rtf" into picassoText
Shuffle
コマンド、 Shuffle
関数
動作: shuffle
コマンドは、文字列の文字またはリストの項目をランダムな順序にします。シャッフルされる値がリストでない場合、それは文字列として扱われます。シャッフルされる値が変数や他のコンテナである場合、コンテナの内容はその場でシャッフルされます。それ以外の場合、シャッフルされた値は変数 it
に格納されます。
関数として呼び出されたとき、 shuffle
は結果となるシャッフルされたリストまたは文字列を返し、式の一部として便利に使用できます。
Command 構文:
shuffle stringOrList
shuffle {the} [words | lines | items] {delimited by delimiter} of aString
Function 構文:
shuffle( stringOrList )
{the} shuffle of stringOrList
stringOrList shuffled
stringOrList 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 {Options} {by sortByExpr}
factor sorted {Options} {by sortByExpr}
Options:
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に入れる
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
コマンドはその順序を変えません。これにより、複数のソートコマンドを順序で使用してサブソートを行うことが可能になります。ソート操作は逆順に行う必要があります。サブソートから始めて、最終的なソートが結果の主要な順序を決定するからです。例えば、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)
Related:
Split
コマンド, Split
関数
挙動: split
コマンドは、指定されたデリミタでテキストを値のリスト、またはキーと値のプロパティリストに分割します。ソース値がコンテナである場合、そのコンテナはこのコマンドの結果としてリスト(またはプロパティリスト)になります。ソース値がコンテナでない場合、変数it
はソース値を分割した結果として得られるリスト(またはプロパティリスト)を受け取ります。
関数として呼び出されると、split
は結果のリストまたはプロパティリストを返し、式の一部として便利に使用できます。
Command 構文:
split sourceText {[by | using | with] listDelimiter {and keyDelimiter}}
Function 構文:
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_がコンテナ(変数)である場合、その変数は分割操作の結果を含むリストまたはプロパティリストになります。そうでない場合、変数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"}
一般的に、standardFormat()
は値の「標準」引用を行い、リスト、プロパティリスト、ツリーの標準形式の使用を強制します。しかし、この関数が返す値が常に特定の形式であることを期待しないでください。正確な形式は、SenseTalkのバージョンごとに変わることがあり、また、値の現在の内部表現など、他の要素にも依存することがあります。しかし、常にvalue(standardFormat(someValue))
がsomeValue
と等しいことは真であるべきです。
関連:
Value
関数the defaultQuoteFormat
グローバルプロパティthe listFormat
グローバルプロパティthe propertyListFormat
グローバルプロパティ- 値の変換。
Text
, AsText
関数
挙動: text
関数(または asText
)は、そのパラメータの値をテキスト形式で返します。
Syntax:
{the} text of factor
text( expr )
例:
set the numberFormat to "00000"
put (4 * 13)'s text into formattedNumber --"00052"
Related: