Interstage Data Effector ユーザーズガイド
目次 索引 前ページ次ページ

付録F サンプルプログラム

F.4 データのソート

入力データを指定した項目でソートし、結果をファイルに出力します。

■ドキュメントサンプ

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

"Rcode","Rname","Scode","Sname","Sales","Location","Size"

"001","東京","1002","渋谷店","3000","繁華街","150"

"004","神奈川","4001","川崎店","5000","駅ビル","120"

"002","千葉","2002","浦安店","2000","駅ビル","137"

"002","千葉","2001","船橋店","1500","モール","215"

"001","東京","1006","品川店","5000","駅中","90"

"003","埼玉","3001","大宮店","3000","専門店","200"

"001","東京","1004","新宿店","9000","百貨店","120"

"004","神奈川","4002","横浜店","8000","繁華街","170"

"001","東京","1001","東京店","12000","駅中","100"

"003","埼玉","3002","浦和店","2000","専門店","95"

"002","千葉","2003","千葉店","6000","専門店","250"

■ソート条

Rcodeについて昇順に並び替え、Rcodeが同じレコードについてはSalseで降順で並び替えて、各レコードのRcode、Rname、Sales、Snameを取り出します。

■APIの使用

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

#include <stdio.h>

#include "libAsis.h"



/* ソート機能 サンプルプログラム */

int main()

{

  /* ハンドル変数群 */

  ASISHANDLE handle;



  /* 作業用変数群 */

  int status;



  /* 入力パラメタ群 */

  char *logFile;

  char *envName;

  char *envValue;

  char *WorkFolder;

  int MemorySize;

  char *CharacterCode;

  char *inFileType;

  char *inFile;

  char *outFile;

  char *Ocondition;

  char *Rcondition;



  /* エラー用変数群 */

  int errorLevel;

  const char *Message;



  /* 変数の初期化 */

  handle = NULL;



  /* ソートハンドルの割当て */

  logFile = "C:\\shunAsis\\sample\\Sort.log";

  status = AsisAllocHandleSort( &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 = AsisSetEnvSort( handle, WorkFolder, MemorySize,

                           NULL, NULL );

  if ( status != ASIS_SUCCESS ) {

    goto ErrorEnd;

  }



  /* ソートの実行 */

  CharacterCode = "SHIFT-JIS";

  inFileType = "CSV";

  inFile = "C:\\shunAsis\\sample\\in.csv";

  outFile = "C:\\shunAsis\\sample\\out.csv";

  Ocondition = "$Rcode, val($Sales) DESC";

  Rcondition = "$Rcode, $Rname, $Sales, $Sname";

  status = AsisExecuteSort( handle, CharacterCode, inFileType,

                            inFile, outFile, Ocondition,

                            Rcondition, NULL, NULL );

  if ( status != ASIS_SUCCESS ) {

    goto ErrorEnd;

  }



  /* ソートハンドルの解放 */

  status = AsisFreeHandleSort( 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 = AsisFreeHandleSort( handle );

    if ( status != ASIS_SUCCESS ) {

      printf( "ハンドル解放エラー : %d\n", status );

    }

  }



  return 1;

}

■実行結 (out.csv)

"Rcode","Rname","Sales","Sname"

"001","東京","12000","東京店"

"001","東京","9000","新宿店"

"001","東京","5000","品川店"

"001","東京","3000","渋谷店"

"002","千葉","6000","千葉店"

"002","千葉","2000","浦安店"

"002","千葉","1500","船橋店"

"003","埼玉","3000","大宮店"

"003","埼玉","2000","浦和店"

"004","神奈川","8000","横浜店"

"004","神奈川","5000","川崎店

目次 索引 前ページ次ページ

Copyright 2007 FUJITSU LIMITED