ページの先頭行へ戻る
Interstage Data Effector V9.3.x リファレンス集
FUJITSU Software

6.1 データの抽出

入力データの中で検索条件に一致するデータを検索し、抽出結果をファイルに出力します。

ドキュメントサンプル

スキーマ情報ファイル (schema.csv)

"Kbn","Kname","Number","Nname","Code","Name","Val"

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

"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"

抽出条件

3つの検索条件に対する抽出処理を同時に実行します。


APIの使用例

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

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

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

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

  /* 入力パラメタ群 */
  char *logFile;
  char *CharacterCode;
  char *inFileType;
  char *query1, *query2, *query3;
  char *outFile1, *outFile2, *outFile3;
  char *queryId1, *queryId2, *queryId3;  char *schemaFile;
  int inFileCnt;
  char *inFile;

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

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

  /* 抽出ハンドルの割当て */
  logFile = "C:\\shunAsis\\sample\\Select.log";
  status = AsisAllocHandleSelect( &handle, logFile );
  if ( status != ASIS_SUCCESS ) {
    goto ErrorEnd;
  }

  /* 動作環境パラメタの指定 */
  CharacterCode = "SHIFT-JIS";
  inFileType = "CSV";
  status = AsisInitSelect( handle, CharacterCode, inFileType,
                           NULL, NULL, 0, 0,
                           NULL, NULL, NULL );
  if ( status != ASIS_SUCCESS ) {
    goto ErrorEnd;
  }

  /* 抽出条件1の登録 */
  query1 = "$Kbn==\'01\'";
  outFile1 = "C:\\shunAsis\\sample\\out1.csv";
  queryId1 = "1";
  status = AsisAddQuerySelect( handle, query1, 0,
                               outFile1, queryId1, NULL, NULL );
  if ( status == ASIS_ERROR ) {
    goto ErrorEnd;
  }

  /* 抽出条件2の登録 */
  query2 = "%1 AND $Code==\'AAA\'";
  outFile2 = "C:\\shunAsis\\sample\\out2.csv";
  queryId2 = "2";
  status = AsisAddQuerySelect( handle, query2, 0,
                               outFile2, queryId2, NULL, NULL );
  if ( status == ASIS_ERROR ) {
    goto ErrorEnd;
  }

  /* 抽出条件3の登録 */
  query3 = "~(%1) AND $Code==\'AAA\'";
  outFile3 = "C:\\shunAsis\\sample\\out3.csv";
  queryId3 = "3";
  status = AsisAddQuerySelect( handle, query3, 0,
                               outFile3, queryId3, NULL, NULL );
  if ( status == ASIS_ERROR ) {
    goto ErrorEnd;
  }


  /* スキーマ情報の指定 */
  schemaFile = "C:\\shunAsis\\sample\\schema.csv";
  status = AsisSetSchemaSelect( handle, 1, schemaFile );
  if ( status != ASIS_SUCCESS ) {
    goto ErrorEnd;
  }

  /* 入力ファイルの指定 */
  inFileCnt = 1;
  inFile = "C:\\shunAsis\\sample\\indata.csv";
  status = AsisSetDataSelect( handle, inFileCnt, &inFile );
  if ( status != ASIS_SUCCESS ) {
    goto ErrorEnd;
  }

  /* 抽出の実行 */
  status = AsisExecuteSelect( handle );
  if ( status != ASIS_SUCCESS ) {
    goto ErrorEnd;
  }

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

  return 1;
}

実行結果

抽出条件1の実行結果(out1.csv)

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

抽出条件2の実行結果(out2.csv)

"Kbn","Kname","Number","Nname","Code","Name","Val"
"01","設備","1000","第一開発部","AAA","ブロックA","1000"
"01","設備","1001","第二開発部","AAA","ブロックA","100"
"01","設備","1002","第三開発部","AAA","ブロックA","1500"

抽出条件3の実行結果(out3.csv)

"Kbn","Kname","Number","Nname","Code","Name","Val"
"02","事務","1000","第一開発部","AAA","ブロックA","500"
"02","事務","1001","第二開発部","AAA","ブロックA","5000"
"02","事務","1002","第三開発部","AAA","ブロックA","1520"

抽出条件の削除

AsisDeleteQuerySelect関数に、抽出ハンドルと検索番号を指定して検索式を削除します。
検索番号に0を指定した場合はすべての検索式を削除します。


  int queryNo;

  /* 抽出条件の登録 */
  queryNo = AsisAddQuerySelect( handle, query, 0,
                                outFile, NULL, NULL, NULL );
  if ( queryNo == ASIS_ERROR ) {
    goto ErrorEnd;
  }



  /* 抽出条件の削除 */
  status = AsisDeleteQuerySelect( handle, queryNo );
  if ( status != ASIS_SUCCESS ) {
    goto ErrorEnd;
  }