テキストとデータの操作
SenseTalkは強力なテキスト処理能力を持っています。ここで説明するChunk Expressionsというチャンク表現は、テキスト文字列の特定の部分にアクセスし、操作するための強力で直感的な手段を提供します。また、テキストに関する情報を取得したり、テキストと他のデータ形式との間で変換したり、高レベルでテキストを操作したりするための多数のコマンドと関数があります。これらのアクションを実行するためのコマンドと関数については以下で詳しく説明します。
Capitalized 関数
Behavior: capitalized関数は、各単語の最初の文字が大文字になるテキストを返します。
構文:
{the} capitalized of stringFactor
capitalized( stringExpr )
例:
put capitalized of "now and then" -- shows "Now And Then"
Related:
CharToNum Function
Behavior: その引数の最初の文字を表す数値コード(Unicode)を返します。
構文:
{the} charToNum of textFactor
charToNum( textExpr )
例:
put charToNum("a") -- 97
Related:
Delete コマンド
Behavior: 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 keepCharacters("SenseTalk", "es") -- Removes all characters except for e and s.
Parameters: 必要に応じて、変数に格納する値を指定できます。
削除する内容を指定するには、削除コマンドに targetTextOrPattern オプションの 1 つを含める必要があります。_targetTextOrPattern式を指定するだけで、_container_内でその式の値が検出されるたびにコマンドによって削除 されるため、このオプションは慎重に使用してください。必要に応じて、必要に応じて、_targetTextOrPattern_の前にall {occurrences of}またはevery {occurrence of} を付けると、影響が明確になります。
例:
_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.5/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
関連:
Delete FileコマンドDelete RecordコマンドDelete Variableコマンド- [参照による削除 stk-references-to-containers.md#deleting)
Deleteプロパティ
ExcludeItems 関数
Behavior: excludeItems 関数は、list1 からの値すべてを含むリストを返し、その中には list2 にも存在しない値も含まれます。デフォルトでは、この関数は caseSensitive プロパティの現在の設定に従います。
構文:
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]
関連:
Format関数
Behavior: 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 or E | | e または E | 'e' または 'E' の前に指数を持つ指数表記の符号付き数値(# は、小数点の右に数字がない場合でも、小数点が表示されることを強制します)format("%e", 27)—> "2.700000e+01"format("%9.2E", 0.04567) —> "4.57E-02" | |
g or G | | g または G | | g または G | 定数('f'と同じ)または指数表記('e'または'E'と同じ)での符号付き数値。どちらかがより少ないスペースで完全な精度を提供します(#は、小数点の右側に数字がない場合でも小数点を表示します。末尾のゼロは削除されません)format("%g", 27) —> "27"format("%+g", 0.04567) —> "+0.04567" | |
c | | c | 一文字format("%-2c", "hello") —> "h" | |
s | | s | テキスト文字列format("%6s", "hello") —> " hello"format("%-3.2s", ".2s", "hello") —> "he " | |
b | | b | バックスラッシュエスケープシーケンスが展開されたテキスト文字列format("%b", "\tHello\\") —> " Hello\" | |
a or A | | a または A | 先頭に 0x(または 0X)と小数点の前に一つの 16 進数の数字を持つ科学表記で表示された符号付き数値。指数を示すために小文字の p(または大文字の P)を使用します(Windowsでは利用できません | |
@ | 通常のテキスト形式で表示される任意の値 |
関連記事: