テキストとデータの操作
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プロパティの設定に従います。