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

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","川崎店