ページのトップに戻る
Interstage Data Effector ユーザーズガイド

F.3 データの集計

入力データを任意のグループごとに演算し、集計結果をファイルに出力します。

ドキュメントサンプル

入力データファイル (in.csv)

"Kbn","Kname","Number","Nname","Code","Name","Val"
"01","設備","1000","第一開発部","AAA","ブロックA","1000"
"01","設備","1000","第一開発部","BBB","ブロックB","1200"
"01","設備","1000","第一開発部","CCC","ブロックC","800"
"02","事務","1000","第一開発部","AAA","ブロックA","500"
"02","事務","1000","第一開発部","BBB","ブロックB","200"
"01","設備","1001","第二開発部","AAA","ブロックA","100"
"01","設備","1001","第二開発部","BBB","ブロックB","500"
"02","事務","1001","第二開発部","AAA","ブロックA","5000"
"02","事務","1001","第二開発部","BBB","ブロックB","3200"
"01","設備","1002","第三開発部","AAA","ブロックA","1500"
"01","設備","1002","第三開発部","BBB","ブロックB","1000"
"02","事務","1002","第三開発部","AAA","ブロックA","1520"

集計条件

KbnとNumberをキーにグループ化して、レコード件数とValの合計と最大を求めます。

APIの使用例

以下にAPIを使用したプログラミング例を示します。

#include <stdio.h>
#include "libAsis.h"

/* 集計機能 サンプルプログラム */
int main()
{
  /* ハンドル変数群 */
  ASISHANDLE handle;

  /* 作業用変数群 */
  int status;

  /* 入力パラメタ群 */
  char *logFile;
  char *envName;
  char *envValue;
  char *CharacterCode;
  char *inFileType;
  char *inFile;
  char *outFileType;
  char *outFile;
  char *Gcondition;
  char *Rcondition;  char *WorkFolder;
  int MemorySize;

  /* エラー用変数群 */
  int errorLevel;
  const char *Message;

  /* 変数の初期化 */
  handle = NULL;

  /* 集計ハンドルの割当て */
  logFile = "C:¥¥shunAsis¥¥sample¥¥Analyze.log";
  status = AsisAllocHandleAnalyze( &handle, logFile );
  if ( status != ASIS_SUCCESS ) {
    goto ErrorEnd;
  }

  /* 数値演算式における空の扱いを指定 */
  envName = ASIS_ENV_SubstituteZeroForEmpty;
  envValue = "NO";
  status = AsisSetEnvironment( handle, envName, envValue );
  if ( status != ASIS_SUCCESS ) {
    goto ErrorEnd;
  }

  /* 集計機能の実行環境の設定 */
  WorkFolder = "C:¥¥shunAsis¥¥sample¥¥tmp";
  MemorySize = 500;
  status = AsisSetEnvAnalyze( handle, WorkFolder, MemorySize,
                           NULL, NULL );
  if ( status != ASIS_SUCCESS ) {
    goto ErrorEnd;
  }

  /* 集計の実行 */
  CharacterCode = "SHIFT-JIS";
  inFileType = "CSV";
  inFile = "C:¥¥shunAsis¥¥sample¥¥in.csv";
  outFileType = NULL;
  outFile = "C:¥¥shunAsis¥¥sample¥¥out.csv";
  Gcondition = "}$Kbn},$Number";
  Rcondition = "$Kname,$Nname,sum($Val) ValSUM,max($Val) ValMAX,count() CT";
  status = AsisExecuteAnalyze( handle, CharacterCode, inFileType,
                               inFile, outFileType, outFile,
                               Gcondition, Rcondition, NULL,
                               NULL, NULL, NULL );
  if ( status != ASIS_SUCCESS ) {
    goto ErrorEnd;
  }

  /* 集計ハンドルの解放 */
  status = AsisFreeHandleAnalyze( handle );
  if ( status != ASIS_SUCCESS ) {
    goto ErrorEnd;
  }

  return 0;


ErrorEnd:    /* エラーが発生した際のエラー処理 */

  /* エラー情報の取得 */
  status = AsisGetErrorLevel( handle, &errorLevel );
  if ( status == ASIS_SUCCESS ) {
    switch( errorLevel ) {
    case ASIS_EL_WARNING:
        printf( "エラーレベル    : 警告¥n");
        break;
    case ASIS_EL_ERR_DATA:
        printf( "エラーレベル    : データのエラー¥n");
        break;
    case ASIS_EL_ERR_PARAMETER:
        printf( "エラーレベル    : パラメタのエラーまたは使用方法のエラー¥n");
        break;
    case ASIS_EL_ERR_ENVIRONMENT:
        printf( "エラーレベル    : 実行環境のエラー¥n");
        break;
    default:
        printf( "エラーレベル取得エラー¥n");
        break;
    }
  }
  else {
    printf( "エラーレベル取得エラー : %d¥n", status );
  }

  status = AsisGetMessageText( handle, &Message );
  if ( status == ASIS_SUCCESS ) {
    printf( "メッセージ : %s¥n", Message );
  }
  else {
    printf( "メッセージ取得エラー : %d¥n", status );
  }

  /* 集計ハンドルの解放 */
  if ( handle != NULL ) {
    status = AsisFreeHandleAnalyze( handle );
    if ( status != ASIS_SUCCESS ) {
      printf( "ハンドル解放エラー : %d¥n", status );
    }
  }

  return 1;
}

実行結果 (out.csv)

"Kbn","Number","Kname","Nname","ValSUM","ValMAX","CT"
"01","1000","設備","第一開発部",3000,1200,3
"01","1001","設備","第二開発部",600,500,2
"01","1002","設備","第三開発部",2500,1500,2
"01","-","設備","第一開発部",6100,1500,7
"02","1000","事務","第一開発部",700,500,2
"02","1001","事務","第二開発部",8200,5000,2
"02","1002","事務","第三開発部",1520,1520,1
"02","-","事務","第一開発部",10420,5000,5
"-","-","設備","第一開発部",16520,5000,12

作業ディレクトリの指定

AsisSetWorkFolderAnalyze関数に、集計ハンドルと一時的に使用するファイルを格納する作業ディレクトリを指定します。

  char *workFolder;

  /* 作業ディレクトリの指定 */
  workFolder = "C:¥¥shunAsis¥¥work¥¥";
  status = AsisSetWorkFolderAnalyze( handle, workFolder );
  if ( status != ASIS_SUCCESS ) {
    goto ErrorEnd;
  }



  /* 集計の実行 */
  status = AsisExecuteAnalyze( handle, CharacterCode, inFileType,
                               inFile, NULL, outFile,
                               Gcondition, Rcondition, NULL,
                               NULL, NULL, NULL );
  if ( status != ASIS_SUCCESS ) {
    goto ErrorEnd;
  }