テキストとデータの操作
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--]}
構文: 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つ連続 (%%
) すると、出力文字列にパーセント記号を出力することができます。
パーセント記号に続き、文字コードの前に、この値の出力長を示す数値を含む形式があるかもしれません。長さは、小数点 (.
) とその後に続く「精度」を示す別の数値に続くかもしれません。これは、数値の表示する小数点以下の桁数、または文字列から表示する最大文字数を示します。長さまたは精度は、その値が追加のパラメータから読み取られるべきであることを示すために、アスタリスク (*
) に置き換えられるかもしれません。
長さの前に、形式コードはまた、必要に応じて以下の修飾子コードを含むこともあります:
- マイナス記号 (-) は、値が指定された長さ内で左寄せになるべきことを示します
- プラス記号 (+) は、符号付き数値形式が正の数に対してプラス記号を表示するべきことを示します
- スペース ( ) は符号付き数値形式が正の数のために追加のスペースを含むべきことを示します
- ゼロ (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 | 一文字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) を生成することもできます。
構文:
date( {dateExpr} )
date( {dateExpr} )** 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つ目のパラメータが指定されていない場合、デフォルトで文字と数字が保持されます。この関数は大文字と小文字を区別します。
構文:
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```