統制構造
制御構造は、指定したパラメーターに基づいて取るべき方向を決定する、スクリプトのコンポーネントです。 ACLScript には、条件分岐の IF ロジックおよびループ構造が用意されています。
IF を使用した条件分岐ロジック
ACLScript には、この言語の IF コマンドや、多数のコマンドのオプション パラメーターとして、条件分岐ロジックが実装されています。
- コマンドの指定により、そのコマンドを実行するかどうかを制御します。
- パラメーターにより、そのコマンドの実行対象となる、テーブル内のレコードを決定します。
IF コマンド
IF コマンドを使用する際には、条件式と、その式が True として評価された場合に実行するコマンドを指定します。
IF v_counter > 10 CLASSIFY ON customer_no
この条件付き構造は実行するコードを制御するので、テストの式に基づいてテーブル全体を処理したい場合には、IF コマンドを使用できます。 式が True として評価された場合には、コマンドはテーブル内のすべてのレコードに対して実行されます。 IF コマンドの詳細については、IF コマンドを参照してください。
IF パラメーター
コマンドの実行対象にするレコードをフィルターで抽出するために使用できるオプションの IF パラメーターは、数多くのコマンドが受け付けています。
CLASSIFY ON customer_no IF state = 'NY'
このステートメントが実行されると、state フィールドの値が 'NY' である、テーブル内のすべてのレコードが分類化されます。
ループ
LOOP コマンド
LOOP コマンドは、ACLScript におけるループ制御構造を提供します。
メモ
LOOP コマンドは、GROUP コマンド内で実行する必要があります。単独では実行できません。
このコマンドは、指定された WHILE 式が True である限り、ループ内のステートメントを処理します。
ASSIGN v_counter = 10 GROUP LOOP WHILE v_counter > 0 v_total = v_total + amount v_counter = v_counter - 1 END END
この構造は amount フィールドの値を変数 v_total への加算を 10 回繰り返します。 各繰り返しの終わりに v_counter 変数が 1 ずつ減算され、WHILE 式でテストされます。 この式が False と評価されると、ループは終了し、スクリプトが進行します。
ループが終了すると、v_total に 10 レコードの amount フィールド値の合計が格納されます。
ループの詳細については、LOOP コマンドを参照してください。
LOOPING とサブスクリプト
時々、LOOP コマンドは必要な正確なループ機能を提供しません。 このような場合、DO SCRIPT コマンドを使用して別の Analytics スクリプトを呼び出すこともできます。DO SCRIPT スクリプト名 WHILE 条件テスト。
次の一般的な方法のいずれかを使用して、ループが終了するときを制御できます。
- フラグ 論理フラグ変数が偽に設定されるまでループが続きます。
- カウンター 増分または減少変数が条件しきい値を超えるまでループが続きます。
サブスクリプトの呼び出しの詳細については、DO SCRIPT コマンドを参照してください。
例
C:\data フォルダーのすべての CSV ファイルをプロジェクトにインポートする必要があります。 DIRECTORY コマンドを使用して、フォルダーからファイルのリストを取得できます。ただし、IMPORT コマンドを GROUP 構造内で使用できません。 DIRECTORY が作成するテーブルを使用した別のループ方法が必要です。
このためには、次のメイン スクリプトを作成します。
- DIRECTORY コマンドを実行し、結果をテーブルに保存します。
- テーブルのレコード数を取得し、カウンターとして使用します。
- テーブルのレコードごとにサブスクリプトを 1 回呼び出し、現在のレコードに対して IMPORT コマンドを実行します。
メインのスクリプト
COMMENT メインのスクリプト DIRECTORY "C:\data\*.csv" TO T_Table_To_Loop OPEN T_Table_To_Loop COUNT v_Num_Records = COUNT1 v_Counter = 1 DO SCRIPT Import_Subscript WHILE v_Counter <= v_Num_Records
サブスクリプトのインポート
COMMENT Import_Subscript OPEN T_Table_To_Loop LOCATE RECORD v_Counter COMMENT CSV ファイルをインポートするためのコード... ASSIGN v_Counter = v_Counter + 1
変数はプロジェクトで実行されるすべてのスクリプトで共有されるため、メイン スクリプトは、v_Counter の値が v_Num_Records の値を超えるまでサブスクリプトを呼び出します。 サブスクリプトが実行されるたびに、v_Counter が増えます。
この構造では、各レコードに対して IMPORT コマンドを呼び出しながら、テーブルをループできます。 メインのスクリプトが完了すると、C:\data フォルダーからすべての CSV ファイルがインポートされます。