HELP

共通マクロ書式

制御書式

NAME 条件式
FORMAT {%IF(条件,真の値,偽の値)}

条件を判定し、条件に合致する場合は真の値を返却し、合致しない場合は偽の値を返却します。条件の比較記号は、>,<,=,>=,<=,!=が使用可能です。条件の左辺、右辺が両方とも数字の場合、数値としての比較を行います。それ以外は文字比較になります。条件や、真の値、偽の値には、各種書式を入れ子で記述することが可能です。

カンマそのものを条件や値に記述したい場合は、「|,」と記述します。

比較式の左辺と右辺が両方とも数値の場合は、比較を数値として行います。

比較式の左辺、右辺は空白も文字列として比較対象とします。

例1
現在の日が20日より後の場合、翌月を返却し、20日以前の場合は、当月を返却する場合
{%SET_U(属性,処理日,{%DATE(yyyy/MM/dd)})}
{%IF({%FORMAT({%GET_U(属性,処理日)},dd)}>20,{%DATE_ADD({%GET_U(属性,処理日)},yyMM,+1M)},{%FORMAT({%GET_U(属性,処理日)},yyMM)})}
現在の日付が2004年2月20日の場合、0402となります。
現在の日付が2004年2月21日の場合、0403となります。
DATEマクロはマクロ毎にシステム日付を取得するので、0時付近に処理をすると日付が変わるので、上記のようにユーザーデータに一度セットしてから、ユーザーデータの日付で判定と取得を行います。
NAME 繰り返し式
FORMAT {%LOOP 名前 繰り返し回数(文字列)}

文字列を繰り返し回数分展開します。名前には任意の文字列を指定します。文字列には、改行が含まれても問題ありません。

文字列には、以下の特殊キーワードが使用できます。

[L_IDX(名前)]

L_IDXキーワードは、LOOPマクロの引数文字列中に使用すると、ループの展開時に、インデックスに置換します。名前には、LOOPマクロで指定した名前と同じ名前を指定します。

例1
ログ出力を3回繰り返す。
{%LOOP L1 3(
  {%WRITE_LOG([L_IDX(L1)])}
)}
結果 1 2 3
NAME ファイルの繰り返し式
FORMAT {%LOOP_FILE 識別子([オプション])(文字列)}

ファイルの繰り返しパネルと同等のファイルループ処理をマクロで実行します。

識別子はファイルの繰り返し式の処理名としてログに出力されます。

オプションには、あらかじめSET_Uマクロで属性をセットしたユーザーデータのキー名を指定します。オプションを省略(空括弧)した場合は、すべての属性がデフォルト値で動作します。

文字列にはファイル毎に実行するマクロを記述します。文字列には改行が含まれても問題ありません。文字列中ではGETマクロの以下の値が使用できます。

{%GET(FullPathFileName)} ... 処理中のファイルのフルパス
{%GET(FileLoopCount)} ... 現在のループカウンタ(1始まり)
{%GET(FileCount)} ... ファイル総数

LOOPマクロのL_IDXキーワードもLOOP_FILEの文字列中で使用できます。

ファイルの繰り返しパネルと同等の以下の処理を自動的に行います。

  • キャンセル処理(Cancel / FileLoopCancel)
  • ログ出力(「~を処理します。」)
  • プログレスバーの初期化・カウントアップ・後処理
  • ユーザーデータのクリア(属性で指定した場合)
  • 中断条件(Until)の評価
  • エラーハンドリング(ErrCatch / ErrorProc)
  • グループ処理(File / Folder / RegExp)
  • メインファイルリスト処理時の「実行済み」状態出力
  • 分割データの削除

オプションで指定したユーザーデータにセットできる属性は以下の通りです。

属性名
LoopTarget 繰り返し対象。省略時は「メイン画面のファイルリスト」。
メイン画面のファイルリスト
処理名(ファイル検索処理等の処理名)
Group グループ単位。省略時は「なし(ファイル)」。
なし(ファイル)
フォルダ
フルパスの一部(正規表現)
GroupSortOrder グループの並び順。省略時は「昇順」。
昇順
昇順 (自然順)
降順
降順 (自然順)
GroupRegEx グループ単位が「フルパスの一部(正規表現)」の場合の正規表現。
FileSort ファイルの並べ替えを行うかどうか。省略時は「しない」。
する
しない
SortTarget 並べ替え対象。省略時は「ファイル」。
ファイル
フルパス
フルパスの一部(正規表現)
更新日
作成日
SortOrder 並べ替え順。省略時は「昇順」。
昇順
昇順 (自然順)
降順
降順 (自然順)
SortRegEx 並べ替え対象が「フルパスの一部(正規表現)」の場合の正規表現。
ClearUserData ファイル毎にユーザーデータをクリアするかどうか。省略時は「しない」。
する
しない
UserDataNotCleared ClearUserDataが「する」の場合にクリアしないユーザーデータのキーをカンマ区切りで指定。
ErrCatch エラー発生時にループを中断するかどうか。省略時は「しない」。
する
しない
ErrorProc エラー発生時に実行するマクロ文字列。マクロで指定する場合は{%ESCAPE()}でマクロ文をエスケープして指定してください。
(例) {%SET_U(Attr,ErrorProc,{%ESCAPE({%WRITE_LOG(エラー発生: {%GET(FileName)})})})}
Until 中断条件のマクロ文字列。各ループの先頭で評価され、結果が「true」の場合にループを中断します。マクロで指定する場合は{%ESCAPE()}でマクロ文をエスケープして指定してください。
(例) {%SET_U(Attr,Until,{%ESCAPE({%IF({%GET(FileLoopCount)}>=3,True,False)})})}

LOOP_FILE実行中にエラーが発生すると、デフォルト(ErrCatch省略時=「しない」)ではエラーを「エラー」レベルでログに出力し、次のファイルの処理を継続します。ErrCatch属性を「する」に設定するとエラー発生時にループを中断します。ループ本体の処理を TRY_CATCH マクロで囲むと、エラーの内容をGET_ERROR_MESSAGE()で取得してログに記録するなど、柔軟なエラーハンドリングが可能です。また、TRY_CATCHでキャッチされたエラーはエラー回数に加算されないため、エラーレベルのログ出力を抑制できます。

例1
オプションを省略してデフォルト設定でファイルの繰り返しを行う。ソートなし、グループなしで投入順に処理する。
{%LOOP_FILE FL1()(
  {%WRITE_LOG([L_IDX(FL1)] / {%GET(FileCount)} : {%GET(FullPathFileName)})}
)}
例2
ファイル名の昇順(自然順)に並べ替えてファイルの繰り返しを行う。
{%SET_U(Attr,FileSort,する)}
{%SET_U(Attr,SortTarget,ファイル)}
{%SET_U(Attr,SortOrder,昇順 (自然順))}
{%LOOP_FILE FL1(Attr)(
  {%WRITE_LOG({%GET(FullPathFileName)})}
)}
例3
ファイル毎にユーザーデータをクリアし、エラー発生時もループを継続する。
{%SET_U(Attr,ClearUserData,する)}
{%SET_U(Attr,UserDataNotCleared,Attr)}
{%SET_U(Attr,ErrCatch,しない)}
{%LOOP_FILE FL1(Attr)(
  {%WRITE_LOG({%GET(FullPathFileName)})}
)}
例4
中断条件(Until)を使い、先頭3件のみ処理する。SET_Uでマクロ文を指定する場合は{%ESCAPE()}でエスケープし、マクロ文がそのまま保存されるようにする。
{%SET_U(Attr,FileSort,する)}
{%SET_U(Attr,SortTarget,ファイル)}
{%SET_U(Attr,SortOrder,昇順)}
{%SET_U(Attr,Until,{%ESCAPE({%IF({%GET(FileLoopCount)}>=4,True,False)})})}
{%LOOP_FILE FL1(Attr)(
  {%WRITE_LOG({%GET(FullPathFileName)})}
)}
例5
TRY_CATCHを使い、ファイル毎にエラーハンドリングを行う。エラーが発生してもログに記録して次のファイルの処理を継続する。
{%LOOP_FILE FL1(Attr)(
  {%TRY_CATCH(
    {%WRITE_LOG({%GET(FullPathFileName)} を処理中)}
    {%MOVE_FILE({%GET(FullPathFileName)},C:\Output\{%GET(FileName)})}
  ,
    {%WRITE_LOG(エラー: {%GET_ERROR_MESSAGE()})}
  )}
)}
NAME 比較演算式作成
FORMAT {%CREATE_COMPARE(左辺,比較演算子(<|>|<=|>=|=|!=|正規表現|部分一致|前方一致|後方一致),右辺)}

引き数の左辺と右辺を比較するための比較演算式情報を作成します。

比較演算子には、「<,>,<=,>=,=,!=,正規表現,部分一致,前方一致,後方一致」の何れかが指定できます。

比較演算を行うためのデータ(JSON文字列)を作成します。

この比較演算用の文字列は条件式評価マクロ(EVALUATE)等で判定を行うことができます。

例1
年齢が20以上であるかを判定する比較演算式情報を作成する。
{%SET_U(属性,年齢,21)}

{%CREATE_COMPARE({%GET_U(属性,年齢)},>=,20)}
例2
処理中ファイルのパスに「総務課」が含まれるかを判定する比較演算式情報を作成、評価して条件分岐の処理を行う。
{%IF({%EVALUATE({%CREATE_COMPARE({%GET(FullPathFileName)},部分一致,総務課)})}=True,
  #条件を満たす場合
  {%WRITE_LOG(条件を満たしています。)}
,
  #条件を満たさない場合
  {%WRITE_LOG(条件を満たしていません。)}
)}
例3
処理中ファイルのパスに「営業1課」又は「総務課」が含まれるかを判定する比較演算式情報を作成する。
{%CREATE_COMPARE({%GET(FullPathFileName)},正規表現,(?:営業1課|総務課))}
例3
処理中ファイル名の先頭が2024で始まっているかを判定する比較演算式情報を作成する。
{%CREATE_COMPARE({%GET(FileName)},前方一致,2024)}
NAME 論理演算式作成
FORMAT {%CREATE_OPERATOR(論理演算子(AND|OR|XOR),論理演算式または比較演算式,論理演算式または比較演算式,[論理演算式または比較演算式],[...])}

論理演算を行うための論理演算式情報を作成します。

2番目以降の引き数に指定された論理演算式または比較演算式を、1番目の引き数で指定された論理積(AND)又は論理和(OR)又は排他的論理和(XOR)で論理演算を行うためのデータ(JSON文字列)を作成します。

この論理演算用の文字列は条件式評価マクロ(EVALUATE)等で判定を行うことができます。

例1
年齢が20以上、且つ、50以下であるかを判定する条件を作成する
{%SET_U(属性,年齢,21)}

{%CREATE_OPERATOR(AND,
  {%CREATE_COMPARE({%GET_U(属性,年齢)},>=,20)},
  {%CREATE_COMPARE({%GET_U(属性,年齢)},<=,50)}
)}
NAME 演算式評価
FORMAT {%EVALUATE(演算式情報)}

比較演算式情報、論理演算式情報から演算式を評価します。

比較演算式作成マクロや論理演算式作成マクロで作成された演算を行うためのデータ(JSON文字列)を引き数に指定します。

評価の結果、条件を満たす場合はTrueを満たさない場合はFalseを返却します。

例1
年齢が20以上、且つ、50以下であるかを判定する条件を評価する。
{%SET_U(属性,年齢,21)}

{%SET_U(temp,条件式,
  {%CREATE_OPERATOR(AND,
    {%CREATE_COMPARE({%GET_U(属性,年齢)},>=,20)},
    {%CREATE_COMPARE({%GET_U(属性,年齢)},<=,50)}
  )}
)}

{%IF({%EVALUATE({%GET_U(temp,条件式)})}=True,
  #条件を満たす場合
  {%WRITE_LOG(条件を満たしています。)}
,
  #条件を満たさない場合
  {%WRITE_LOG(条件を満たしていません。)}
)}
NAME エラーハンドリング式
FORMAT {%TRY_CATCH(試行する処理,エラー時の処理)}

第1引数のマクロを実行し、エラーが発生した場合に第2引数のマクロを実行します。

エラーが発生しなかった場合は、第1引数の実行結果を返却します。

エラーが発生した場合は、エラーメッセージを設定してから第2引数のマクロを実行し、その結果を返却します。第2引数が省略された場合は空文字を返却します(エラーを無視します)。

TRY_CATCHはエスケープ系マクロです。引数部分のマクロは自動的にエスケープされ、TRY_CATCH内部で個別に実行されます。そのため、引数をESCAPEマクロでエスケープする必要はありません。

TRY_CATCHでキャッチされたエラーは、処理階層内のエラー回数(CurrentErrorCount)には加算されません。エラーは「処理済み」として扱われます。
エラー時の処理中で{%GET_ERROR_MESSAGE()}を使用すると、発生したエラーのメッセージを取得できます。

例1
エラーが発生する可能性のある処理を実行し、エラー時にエラーメッセージをログに出力する。
{%TRY_CATCH(
  {%WRITE_LOG(処理を開始します)}
  {%MOVE_FILE({%GET(FullPathFileName)},C:\Output\{%GET(FileName)})}
,
  {%WRITE_LOG(エラー発生: {%GET_ERROR_MESSAGE()})}
)}
例2
エラーを無視して処理を続行する(第2引数を省略)。ファイル移動に失敗してもエラーにならない。
{%TRY_CATCH({%MOVE_FILE({%GET(FullPathFileName)},C:\Output\{%GET(FileName)})})}
例3
LOOP_FILEと組み合わせて、ファイル毎にエラーハンドリングを行う。エラーが発生しても次のファイルの処理を継続する。
{%LOOP_FILE FL1(Attr)(
  {%TRY_CATCH(
    {%WRITE_LOG([{%GET(FileLoopCount)}/{%GET(FileCount)}] {%GET(FileName)})}
    {%MOVE_FILE({%GET(FullPathFileName)},C:\Output\{%GET(FileName)})}
  ,
    {%WRITE_LOG(エラー: {%GET_ERROR_MESSAGE()})}
  )}
)}
例4
複数の処理ステップをそれぞれ独立してエラーハンドリングする。ステップ1でエラーが発生してもステップ2は実行される。
{%LOOP_FILE FL1(Attr)(
  {%TRY_CATCH(
    {%WRITE_LOG(ステップ1: マクロ実行)}
    {%PARSE_MACRO({%GET_U(属性,マクロ)})}
  ,
    {%WRITE_LOG(ステップ1でエラー: {%GET_ERROR_MESSAGE()})}
  )}
  {%TRY_CATCH(
    {%WRITE_LOG(ステップ2: ファイル移動)}
    {%MOVE_FILE({%GET(FullPathFileName)},C:\Output\{%GET(FileName)})}
  ,
    {%WRITE_LOG(ステップ2でエラー: {%GET_ERROR_MESSAGE()})}
  )}
)}
例5
TRY_CATCHをネストして、エラー時の処理自体のエラーもハンドリングする。
{%TRY_CATCH(
  {%MOVE_FILE({%GET(FullPathFileName)},C:\Output\{%GET(FileName)})}
,
  {%TRY_CATCH(
    {%WRITE_LOG(エラー: {%GET_ERROR_MESSAGE()})}
    {%SET_U(通知先,1,admin@example.com)}
    {%SEND_MAIL(メールサーバー1,通知先,noreply@example.com,,,エラー通知,{%GET_ERROR_MESSAGE()})}
  ,
    {%WRITE_LOG(エラー通知の送信にも失敗しました)}
  )}
)}