空白削除

FORMAT1 {%TRIM(文字列)}

引数文字列の先頭と末尾の連続するスペースを削除します。

例1 マクロと結果

{%TRIM( abc )} -> "abc"
左部分文字列抽出

FORMAT1 {%LEFT(文字列,文字数)}

引数文字列の左から指定文字数分抽出します。

例1 マクロと結果

{%LEFT(abc,2)} -> "ab"

SJISに置き換えてバイト数指定で抽出を行う場合は、{%LEFTB(文字列,文字数)}を使用します。

文字列抽出

FORMAT1 {%MID(文字列,開始位置,文字数)}

引数文字列の開始位置から文字数分抽出します。文字数は省略可能。省略した場合は、文字数指定無し、つまり開始位置以降、全てとなります。

例1 マクロと結果

{%MID(abc,2,1)} -> "b"
{%MID(abc,2)} -> "bc"

SJISに置き換えてバイト数指定で抽出を行う場合は、{%MIDB(文字列,開始位置,文字数)}を使用します。

文字長取得

FORMAT1 {%LEN(文字列)}

マクロ書式の説明

例1 引数文字列の文字数を取得します。

{%LEN(abc)} -> "3"

SJISに置き換えてバイト数で文字数取得を行う場合は、{%LENB(文字列)} を使用します。

大文字変換

FORMAT1 {%TO_UPPER(文字列)}

引数文字列を大文字に変換します。

例1 マクロと結果

{%TO_UPPER(abc)} -> "ABC"
小文字変換

FORMAT1 {%TO_LOWER(文字列)}

引数文字列を小文字に変換します。

例1 マクロと結果

{%TO_LOWER(ABC)} -> "abc"
文字列置換

FORMAT1 {%REPLACE(文字列,検索文字,置換文字)}

引数文字列から検索文字を検索し、置換文字に置換します。検索文字が複数見つかった場合も全て置換します。

例1 マクロと結果

{%REPLACE(abcde,c,x)} -> "abxde"
{%REPLACE(abcabc,bc,x)} -> "axax"
正規表現文字列置換

FORMAT1 {%REGEX_REPLACE(文字列,検索文字(正規表現),置換文字)}

引数文字列から検索文字(正規表現)を検索し、置換文字に置換します。検索文字が複数見つかった場合も全て置換します。

例1 マクロと結果

{%REGEX_REPLACE(ab123de,\d+,c)} -> "abcde"
正規表現文字列抽出(簡易)

FORMAT1 {%REGEX_CAPTURE(正規表現,文字列,[オプション])}

正規表現で文字列の一部分を取得します。正規表現には必ず一組の()を記述してください。()の中の正規表現にマッチする文字が返却されます。複数の検索やキャプチャを行いたい場合は REGEX_MATCHマクロ を使用してください。

オプション文字は省略可能です。指定した場合は以下の仕様となります。

オプション

内容

i

大文字、小文字を区別しない。

m

文字列を複数行として扱う。^と$が行頭と行末にマッチするようになります。

正規表現の詳細については.NETの正規表現ライブラリについて調べてください。chatGPTなどのAIで作成してもよいと思います。

例1 拡張子を除いたファイル名の末尾の数字を取得する場合

{%MSGBOX({%REGEX_CAPTURE((\d+)$,{%GET(FileNameWithoutExtension)})})}

「Test001」の場合は、「001」が取得されます。

例2 フルパスファイル名からファイル名の一つ上のフォルダ名を取得する場合

{%MSGBOX({%REGEX_CAPTURE(([^\\]+)\\[^\\]+$,{%GET(FullPathFileName)})})}
「D:\東京支店\第一営業部\請求書001.xdw」の場合、「第一営業部」が取得されます。

例3 NO又はno又はNo又はnOの後ろの数字を取得する場合

{%MSGBOX({%REGEX_CAPTURE(NO(\d+),{%GET(FileNameWithoutExtension)},i)})}
ファイル名の中の「NO」の後ろの数字を取得します。iオプションを指定していますので、大文字小文字を区別せず、「no」や「No」でも対象となります。
「No001_Test」の場合、「001」が取得されます。
正規表現文字列抽出

FORMAT1 {%REGEX_MATCH(正規表現,文字列,格納先ユーザーデータ(キャプチャ),格納先ユーザーデータ(マッチ),[オプション])}

正規表現で文字列の一部分を取得します。複数の文字列取得が可能です。()を記述すればキャプチャが可能です。1つのキャプチャのみを行いたい場合は REGEX_CAPTUREマクロ を使用してください。

正規表現にマッチした文字列は、「格納先ユーザーデータ(マッチ)」で指定されたユーザーデータに結果が格納されます。キーは1から始まる番号となります。例えば「格納先ユーザーデータ(マッチ)」に「MATCH」を指定して、1番目に見つかった文字列は「{%GET_USER_DATA(MATCH,1)}」で参照できます。

「()」を使用して文字列をキャプチャした場合は、「格納先ユーザーデータ(キャプチャ) + マッチ番号」で指定されたユーザーデータに結果が格納されます。キーは1から始まる番号となります。例えば「格納先ユーザーデータ(キャプチャ)」に「GROUP」を指定して、1番目に見つかった文字の一番目のキャプチャ文字列は「{%GET_USER_DATA(GROUP1,1)}」で参照できます。

オプション文字の意味は以下の通りです。

オプション

内容

i

大文字、小文字を区別しない。

m

文字列を複数行として扱う。^と$が行頭と行末にマッチするようになります。

正規表現の詳細については参考書等を参照願います。(.NETの正規表現ライブラリを使用しています。)

例1 複数の検索を行う場合

{%REGEX_MATCH(\d,x1y2z3,GROUP,MATCH)}

{%LOOP L1 {%GET_USER_DATA_COUNT(MATCH)}(
  {%WRITE_LOG(MATCH={%GET_USER_DATA(MATCH,[L_IDX(L1)])})}
)}


上記のマクロを実行するとログの内容に以下の文字列が出力されます。

MATCH=1
MATCH=2
MATCH=3

例2 複数のキャプチャを行う場合

{%REGEX_MATCH(x(\d+).*z(\d+),x1y2z3,GROUP,MATCH)}

{%LOOP L1 {%GET_USER_DATA_COUNT(MATCH)}(
  {%WRITE_LOG(MATCH={%GET_USER_DATA(MATCH,[L_IDX(L1)])})}
  {%LOOP L2 {%GET_USER_DATA_COUNT(GROUP[L_IDX(L1)])}(
    {%WRITE_LOG(GROUP[L_IDX(L1)]={%GET_USER_DATA(GROUP[L_IDX(L1)],[L_IDX(L2)])})}
  )}
)}


上記のマクロを実行するとログの内容に以下の文字列が出力されます。

MATCH=x1y2z3
GROUP1=1
GROUP1=3

例3 複数の検索とキャプチャを行う場合

{%REGEX_MATCH(x(\d+)y(\d+),x1y2z3x1y2z3,GROUP,MATCH)}

{%LOOP L1 {%GET_USER_DATA_COUNT(MATCH)}(
  {%WRITE_LOG(MATCH={%GET_USER_DATA(MATCH,[L_IDX(L1)])})}
  {%LOOP L2 {%GET_USER_DATA_COUNT(GROUP[L_IDX(L1)])}(
    {%WRITE_LOG(GROUP[L_IDX(L1)]={%GET_USER_DATA(GROUP[L_IDX(L1)],[L_IDX(L2)])})}
  )}
)}


上記のマクロを実行するとログの内容に以下の文字列が出力されます。

MATCH=x1y2
GROUP1=1
GROUP1=2
MATCH=x1y2
GROUP2=1
GROUP2=2

例4 オプションmについて

以下のような改行を含んだ文字列の場合

{%REGEX_MATCH((^x\d+),x1y2z3
x1y2z3,GROUP,MATCH)}

{%LOOP L1 {%GET_USER_DATA_COUNT(MATCH)}(
  {%WRITE_LOG(MATCH={%GET_USER_DATA(MATCH,[L_IDX(L1)])})}
)}

上記のマクロを実行するとログの内容に以下の文字列が出力されます。
^が文字列全体の先頭にマッチします。

MATCH=x1

オプションmを指定すると、

{%REGEX_MATCH((^x\d+),x1y2z3
x1y2z3,GROUP,MATCH,m)}

{%LOOP L1 {%GET_USER_DATA_COUNT(MATCH)}(
  {%WRITE_LOG(MATCH={%GET_USER_DATA(MATCH,[L_IDX(L1)])})}
)}

上記のマクロを実行するとログの内容に以下の文字列が出力されます。
^が行の先頭にマッチするため2回出力されます。

MATCH=x1
MATCH=x1
正規表現のメタ文字のエスケープ

FORMAT1 {%ESCAPE_REGEX(文字列)}

正規表現のメタ文字をエスケープします。

正規表現では「.」や「+」などの文字に意味を持たせて表記するルールがありますが、検索文字に「.」そのものを指定したい場合は、「\.」と表記(エスケープ)する必要があります。本マクロは引き数の文字列全てをエスケープした文字に置換して返却します。

正規表現の詳細については参考書等を参照願います。(.NETの正規表現ライブラリを使用しています。)

例1 文字列「ABC.+DEF」から、「.+」を正規表現でキャプチャする例と、「.+」そのものをキャプチャする例

{%WRITE_LOG({%REGEX_CAPTURE((.+),ABC.+DEF)})}
{%WRITE_LOG({%REGEX_CAPTURE(({%ESCAPE_REGEX(.+)}),ABC.+DEF)})}
結果
ABC.+DEF マクロ名[WRITE_LOG]
.+ マクロ名[WRITE_LOG]

例2 フォルダ名から、CSV読み込み1で読み込んだ1番目の項目の値で検索を行います。1番目の項目の値に正規表現のメタ文字がある場合でも、そのままの文字として検索を行います。

{%IF({%REGEX_CAPTURE(({%ESCAPE_REGEX({%GET_FIELD_VALUE(CSV読み込み1,1)})}),{%GET(FolderName)})}!=,
  #該当の文字が見つかった場合
  {%SET_U(属性,配信先,{%GET_FIELD_VALUE(CSV読み込み1,2)})}
,)}
文字列変換

FORMAT1 {%STR_CONV(文字列,変換種類)}

文字列の変換処理を行います。

文字列に変換したい文字を指定します。

変換種類には、以下の変換種類の番号を指定します。番号を足し算して複数指定することも可能です。(例「小文字を大文字 + 全角を半角」は1+8で9を指定)

変換種類

内容

1

小文字を大文字に変換します。

2

大文字を小文字に変換します。

3

各単語の先頭文字を大文字に変換します。

4

半角文字を全角文字に変換します。

8

全角文字を半角文字に変換します。

16

ひらがなをカタカナに変換します。

32

カタカナをひらがなに変換します。

例1 文字の変換例。

#小文字を大文字
{%WRITE_LOG({%STR_CONV(abc,1)})} -> ABC
{%WRITE_LOG({%STR_CONV(abc,1)})} -> ABC

#大文字を小文字
{%WRITE_LOG({%STR_CONV(ABC,2)})} -> abc
{%WRITE_LOG({%STR_CONV(ABC,2)})} -> abc

#先頭文字を大文字
{%WRITE_LOG({%STR_CONV(abc def,3)})} -> Abc Def

#半角を全角
{%WRITE_LOG({%STR_CONV(abc,4)})} -> abc
{%WRITE_LOG({%STR_CONV(アイウ,4)})} -> アイウ

#全角を半角
{%WRITE_LOG({%STR_CONV(abc ,8)})} -> abc
{%WRITE_LOG({%STR_CONV(アイウ,8)})} -> アイウ

#ひらがなをカタカナ
{%WRITE_LOG({%STR_CONV(あいう,16)})} -> アイウ

#カタカナをひらがな
{%WRITE_LOG({%STR_CONV(アイウ,32)})} -> あいう
{%WRITE_LOG({%STR_CONV(アイウ,32)})} -> アイウ

#小文字を大文字 + 全角を半角
{%WRITE_LOG({%STR_CONV(abc,9)})} -> ABC
{%WRITE_LOG({%STR_CONV(abc,9)})} -> ABC

#カタカナをひらがな + 半角を全角
{%WRITE_LOG({%STR_CONV(アイウ,36)})} -> あいう

#矛盾したパラメータ
{%WRITE_LOG({%STR_CONV(abc ,12)})} -> エラー
全角半角変換

FORMAT1 {%STR_CONV_ZEN_HAN(文字列,[変換後文字種(半角英字|半角数字|半角記号|半角カタカナ|全角英字|全角数字|全角記号|全角カタカナ|半角英数記号|全角英数記号)])}

全角文字から半角文字、及び、半角文字から全角文字への変換処理を行います。

対象文字列に変換したい文字列を指定します。

変換後文字種には、以下の文字種を指定します。|で連結して複数指定可能です。 省略した場合は、「半角英数記号|全角カタカナ」になります。

変換文字種

内容

半角英字

全角英字を半角英字に変換します。

半角数字

全角数字を半角数字に変換します。

半角記号

全角記号を半角記号に変換します。

半角カタカナ

全角カタカナを半角カタカナに変換します。

全角英字

半角英字を全角英字に変換します。

全角数字

半角数字を全角数字に変換します。

全角記号

半角記号を全角記号に変換します。

全角カタカナ

半角カタカナを全角カタカナに変換します。

半角英数記号

全角英数記号を半角英数記号に変換します。

全角英数記号

半角英数記号を全角英数記号に変換します。

例1 文字の変換例。

#全角英数記号を半角英数記号に、半角カタカナを全角カタカナに変換
{%WRITE_LOG({%STR_CONV_ZEN_HAN(〒104-0031 東京都中央区京橋3-7-6 国立映画アーカイブ本館)})} > 〒104-0031 東京都中央区京橋3-7-6 国立映画アーカイブ本館

#全角英字を半角英字に、全角数字を半角数字に変換
{%WRITE_LOG({%STR_CONV_ZEN_HAN(109CINEMAS,半角英字|半角数字)})} > 109CINEMAS

#全角カタカナを半角カタカナに変換
{%WRITE_LOG({%STR_CONV_ZEN_HAN(スケジュール,半角カタカナ)})} > スケジュール
特定文字列変換

FORMAT1 {%STR_CONV_SPEC_CHAR(文字列,[変換内容(ひらがなをカタカナ|カタカナをひらがな|特殊を標準|長音をマイナス)])}

特定文字列の変換処理を行います。

変換内容を指定します。

変換内容には、以下の文字列を指定します。|で連結して複数指定可能です。 省略した場合は、「特殊を標準|長音をマイナス 」になります。

変換文字種

内容

ひらがなをカタカナ

全角ひらがなを全角カタカナに変換します。

カタカナをひらがな

全角カタカナ及び半角カタカナを全角ひらがなに変換します。

特殊を標準

特殊文字(㈱など)を標準文字(半角英数記号と標準的な全角文字)に変換します。

長音をマイナス

直前に全角カタカナひらがなが存在しない全角長音を全角マイナスに変換します。直前に半角カタカナが存在しない半角長音を半角マイナスに変換します。

例1 文字の変換例。

#特殊文字を標準文字に変換
{%WRITE_LOG({%STR_CONV_SPEC_CHAR(㈱YK-HOME)})} > (株)YK-HOME

#カタカナをひらがなに変換
{%WRITE_LOG({%STR_CONV_SPEC_CHAR(サイタマ市,カタカナをひらがな)})} > さいたま市
ユーザーデータによる文字列変換

FORMAT1 {%STR_CONV_BY_USER_DATA(文字列,ユーザーデータ名)}

ユーザーデータにセットされたキーに合致する文字を、対応する値に変換します。

対象文字列に変換したい文字列を指定します。

ユーザーデータ名には、変換したい文字をキーに、変換後の文字を値にセットしたユーザーデータの名前を指定します。

例1 文字の変換例。

#ライナックス、リーヌークス、リヌックスをリナックスに変換
{%SET_U(変換テーブル,ライナックス,リナックス)}
{%SET_U(変換テーブル,リーヌークス,リナックス)}
{%SET_U(変換テーブル,リヌックス,リナックス)}
{%WRITE_LOG({%STR_CONV_BY_USER_DATA(ライナックス,変換テーブル)})} > リナックス
数字を漢数字に変換

FORMAT1 {%STR_CONV_SUJI_TO_KANSUJI(対象文字列,[大字])}

対象文字列の数字をすべて漢数字に変換します。

また、大字を指定すると大字に変換します。

例1 文字の変換例。

{%WRITE_LOG({%STR_CONV_SUJI_TO_KANSUJI(12345)})}
{%WRITE_LOG({%STR_CONV_SUJI_TO_KANSUJI(第3話)})}
{%WRITE_LOG({%STR_CONV_SUJI_TO_KANSUJI(上弦・3,大字)})}

結果
一万二千三百四十五
第三話
上弦・参
漢数字を数字に変換

FORMAT1 {%STR_CONV_KANSUJI_TO_SUJI(対象文字列)}

対象文字列の漢数字(大字含む)をすべて数字に変換します。

例1 文字の変換例。

{%WRITE_LOG({%STR_CONV_KANSUJI_TO_SUJI(一万二千三百四十五)})}
{%WRITE_LOG({%STR_CONV_KANSUJI_TO_SUJI(第三話)})}
{%WRITE_LOG({%STR_CONV_KANSUJI_TO_SUJI(上弦・参)})}

結果
12345
第3話
上弦・3
文字列書式整形

FORMAT1 {%FORMAT(値,書式)}

値を書式に従って整形します。

書式の仕様については、日付に関して日付取得マクロと同じになります。内部的にはVB.NETのStrings.Format(名前空間:Microsoft.VisualBasic)を呼び出していますので、マイクロソフトのサイト等で、Formatの仕様を参照してください。

例1 マクロと結果

{%FORMAT(5,000)} -> "005"
{%FORMAT(005,0)} -> "5"
{%FORMAT(2004/10/01,yyyy/MM/dd)} -> "2004/10/01"
{%FORMAT(2014/11/12 18:10:20,ggge年M月d日(aaa) HH:mm:ss)}
-> "平成26年11月12日(水) 18:10:20"

文字列複製

FORMAT1 {%STRING(文字列,繰り返し回数)}

引数の文字列を指定回数複製した文字列を返却します。繰り返し回数に負の値を設定した場合は空文字列を返却します。

例1 マクロと結果

{%STRING(0,3)} -> "000"
{%STRING(X,5)} -> "XXXXX"
{%STRING(ABC,2)} -> "ABCABC"
文字列分割

FORMAT1 {%SPLIT(文字列,区切り文字,ユーザーデータ名)}

区切り文字が入った文字列を、引数の区切り文字により、分割することができます。
分割結果はユーザーデータに格納されます。
内容はユーザーデータのキーに項目番号(1~)を指定することで参照できます。
また、分割数は「GET_USER_DATA_COUNT」マクロで参照できます。

例1 文字列「山田-19-男」を、区切り文字「-」で分割し、ユーザーデータ名「分割結果」として、ユーザーデータに保管する場合

{%SPLIT(山田-19-男,-,分割結果)}

ユーザーデータに格納されたデータは、ユーザーデータ名、キーを指定することにより、検索することができます。

例1 文字列「田中-女-90」を、区切り文字「-」で分割し、ユーザーデータ名「分割結果」として、ユーザーデータに保管し、その結果をメッセージボックスに表示する場合

{%SPLIT(田中-女-90,-,分割結果)}
{%WRITE_LOG({%GET_USER_DATA_COUNT(分割結果)})}
{%WRITE_LOG({%GET_U(分割結果,1)})}
{%WRITE_LOG({%GET_U(分割結果,2)})}
{%WRITE_LOG({%GET_U(分割結果,3)})}

ログには、
3
田中
女
90
と順に表示されます。

区切り文字が「,」である場合には、入力する区切り文字を「|,」としてください。

例1 文字列「東京,13」を区切り文字「,」で分割し結果をループマクロで分割された個数分、内容を順に表示する。

{%SPLIT(東京|,13,|,,地名)}
{%LOOP L1 {%GET_USER_DATA_COUNT(地名)}(
  {%WRITE_LOG({%GET_USER_DATA(地名,[L_IDX(L1)])})}
)}

ログには、
東京
13
と順に表示されます。
文字列連結

FORMAT1 {%JOIN(ユーザーデータ名,[分類キー1,分類キー2,分類キー3,分類キー4,分類キー5,分類キー6,分類キー7,分類キー8,分類キー9,分類キー10],連結文字)}

ユーザーデータに格納された値を連結文字で連結します。

例1 ユーザーデータ名「果物」に格納されている値をカンマ区切りで連結する場合

{%SET_USER_DATA(果物,1,りんご)}
{%SET_USER_DATA(果物,2,みかん)}
{%SET_USER_DATA(果物,3,すいか)}
{%MSGBOX({%JOIN(果物,|,)})}
結果
りんご,みかん,すいか
空文字

FORMAT1 {%NULL(文字列)}

引数で渡された文字列を空文字で返却します。 マクロを処理した結果の文字を消したい場合に使います。

マクロ解析

FORMAT1 {%PARSE_MACRO(文字列)}

引数で渡された文字列をマクロとして解析して、解析後の文字列を返却します。実行系のマクロは実行されます。

本マクロは入力データ等の文字を処理すると、悪意のあるコードを実行することができてしまいます。セキュリティーに十分注意して使用してください。

例1 「data.txt」の内容を読み込んで、キー「today」の値をマクロ解析してログに出力する。

「data.txt」の内容(タブ区切り)
today	今日は{%DATE(yyyy/MM/dd)}です。
マクロ
{%LOAD_USER_DATA(D:\Home\temp\data.txt,data)}
{%WRITE_LOG({%PARSE_MACRO({%GET_U(data,today)})})}
結果
今日は2021/08/22です。 マクロ名[WRITE_LOG]
エスケープ

FORMAT1 {%ESCAPE(文字列)}

引数文字列を返却します。

文字列中にマクロが含まれていてもマクロを実行せず、そのままの文字列を返却します。

エスケープマクロの引数文字列はeDocArrangement2のマクロ実行は行いませんが、 マクロの構文解析は行います。構文に誤りがあると末尾の「)}」を認識できずに期待通り機能しません。

引数の文字列はマクロの実行が行われなくなるので、マクロのコメントアウトのように使うこともできます。

例1 テキストファイル書き込みマクロを使ってメッセージ表示マクロの説明文を出力する。(以下の場合、「{%MSGBOX(メッセージ)}」は実行されません。)

{%ADD_USER_DATA(writeData,メッセージボックス表示マクロについて)}
{%ADD_USER_DATA(writeData,{%ESCAPE({%MSGBOX(メッセージ)}と書くとメッセージを表示します。)})}
{%WRITE_FILE(D:\test.txt,writeData,SJIS,New)}

例2 マクロをコメントアウトする。(マクロ構文に誤りがあると機能しません。)

{%ESCAPE( 2024/05/21 一時的にコメントとする
  
  #ファクス番号のチェック
  {%IF({%GET_U(属性,受信ファクス番号)}=,
    #空の場合はエラー
    {%SET_U(属性,判定,False)}
    {%SET_U(属性,メッセージ,■ERR■【ファクス受信】ファクス受信番号がありません。)}
  ,)}

)}
暗号ファイル作成

FORMAT1 {%STRING_ENCRYPTION(文字列,ファイル名)}

引数で渡された文字列を暗号化して、ファイルを作成します。

暗号化したファイルから復号すること(暗号化する前の文字列を取得すること)は簡単ではないですが、不可能ではありませんので、暗号化ファイルが外部に漏れないようにしてください。

暗号ファイルは「 暗号ファイル作成ツール 」(メイン画面のツールメニュー)からも作成できます。本マクロは大量の暗号ファイルを作成するときなどに利用してください。

例1 「ABC123」を暗号化して「password.dat」に保存する。

{%STRING_ENCRYPTION(ABC123,C:\Home\Demo1\90_System\password.dat)}