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

F.2 データの連結

ジャーナルデータとマスタデータを連結条件に合わせて結合編集し、連結結果をファイルに出力します。

ドキュメントサンプル


入力ジャーナルファイル (journal.csv)

"Kbn","Number","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"

入力マスタファイル1 (master1.csv)

"Kcode","Kname"
"01","設備"
"02","事務"

入力マスタファイル2 (master2.csv)

"Ncode","Nname"
"1000","第一開発部"
"1001","第二開発部"
"1002","第三開発部"

連結条件

KbnとKcode、NumberとNcodeを連結照合して、それぞれKname、Nnameを取り出します。


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 *jnlFile;
  char *mstFile;
  char *listDef;
  char *outFileType;
  char *outputDef;
  char *Jcondition;
  char *outFile;

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

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

  /* 連結ハンドルの割当て */
  logFile = "C:¥¥shunAsis¥¥sample¥¥Replace.log";
  status = AsisAllocHandleReplace( &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;
  }

  /* 連結条件などの指定 */
  CharacterCode = "SHIFT-JIS";
  inFileType = "CSV";
  jnlFile = "Journal ¥"C:¥¥shunAsis¥¥sample¥¥journal.csv¥"";
  mstFile = "{Master1 ¥"C:¥¥shunAsis¥¥sample¥¥master1.csv¥""
            ",Master2 ¥"C:¥¥shunAsis¥¥sample¥¥master2.csv¥"}";
  listDef = "{document(Journal){$Kbn Kbn,$Number Number,$Code Code,$Name Name,$Val Val}"
            ",document(Master1){$Kcode Kcode,$Kname Kname}"
            ",document(Master2){$Ncode Ncode,$Nname Nname}}";
  outFileType = NULL;
  outputDef = "{$Kbn,$Kname,$Number,$Nname,$Code,$Name,$Val}";
  Jcondition = "{join (Journal, Master1, $Kbn == $Kcode, ¥"LEFT¥"),"
                "join (Journal, Master2, $Number == $Ncode, ¥"LEFT¥")}";
  
  outFile = "C:¥¥shunAsis¥¥sample¥¥out.csv";
  status = AsisInitReplace( handle, CharacterCode, inFileType,
                            jnlFile, mstFile, listDef,
                            outFileType, outputDef, NULL,
                            Jcondition, outFile, NULL, NULL, NULL );
  if ( status != ASIS_SUCCESS ) {
    goto ErrorEnd;
  }

  /* 連結の実行 */
  status = AsisExecuteReplace( handle );
  if ( status != ASIS_SUCCESS ) {
    goto ErrorEnd;
  }

  /* 連結ハンドルの解放 */
  status = AsisFreeHandleReplace( 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 = AsisFreeHandleReplace( handle );
    if ( status != ASIS_SUCCESS ) {
      printf( "ハンドル解放エラー : %d¥n", status );
    }
  }

  return 1;
}

実行結果 (out.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"