SORTKIT/Enterprise Cプログラミング例

/* 可変長レコード可変長フィールドの入出力ファイルインタフェース */
/* サンプルプログラム                      */
/*                                */
/* 入力ファイル : exp.in                */
/* 出力ファイル : exp.out               */
/* フィールド分離文字 : ブランク               */
/* ソートキー  : その1 1フィールド目           */
/*          その2 3フィールド目           */
/* キー比較時オプション : ソートキー その2-数値比較    */

#include  <stdio.h>
#include  <memory.h>
#include  "nsort.h"

struct intftbl    p_intftbl;          /* インタフェーステーブル */
struct fieldtbl_v p_fieldtbl_v;       /* フィールドテーブル(可変長キー) */
struct fieldinf_v *p_fieldinf_v[2];
struct fieldinf_v p_fieldinf_v1;
struct fieldinf_v p_fieldinf_v2;
struct optiontbl  p_optiontbl;        /* オプション指定テーブル */
struct reporttbl  p_exerep;           /* 実行情報出力テーブル */
struct infiletbl  p_infiletbl;        /* 入力ファイルテーブル */
struct filespec_i p_filespec_i;
struct otfiletbl  p_otfiletbl;        /* 出力ファイルテーブル */
struct filespec_o p_filespec_o;

int main()
{

  /* * * * * * * * * * * * * * * */
  /*    テーブル初期値セット     */
  /* * * * * * * * * * * * * * * */

  /* インタフェーステーブル */
  memset(&p_intftbl, 0, sizeof(struct intftbl));
  p_intftbl.recform = VRVF;      /* レコード/キー形式:可変長 */
  p_intftbl.minmemsiz = 64;      /* 最小メモリサイズ */
  p_intftbl.maxmemsiz = 1024;    /* 最大メモリサイズ */

  /* フィールドテーブル */
  memset(&p_fieldtbl_v, 0, sizeof(struct fieldtbl_v));
  p_fieldtbl_v.csoption = 0;          /* キー比較時オプション(グローバル):無し */
  p_fieldtbl_v.fieldinf_num = 2;      /* キー数 */
  p_fieldtbl_v.delimit = NULL;        /* フィールド分離文字:指定なし(ブランク) */
  p_fieldtbl_v.code = ASCII;          /* 文字コード:ASCII */
  p_fieldtbl_v.fieldinf_v_p = p_fieldinf_v;

  p_fieldinf_v[0] = &p_fieldinf_v1;   /* キー その1 */
	memset(&p_fieldinf_v1, 0, sizeof(struct fieldinf_v));
	p_fieldinf_v1.fieldpos1 = 0;      /* ソートキー開始フィールド:0フィールド目 */
	p_fieldinf_v1.bytepos1 = 0;       /* ソートキー開始バイト位置:0バイト目 */
	p_fieldinf_v1.fieldpos2 = 1;      /* ソートキー終了フィールド:1フィールド目 */
	p_fieldinf_v1.bytepos2 = 0;       /* ソートキー終了バイト位置:0バイト目 */
	p_fieldinf_v1.csoption = 0;       /* キー比較時オプション:なし */

  p_fieldinf_v[1] = &p_fieldinf_v2;   /* キー その2 */
	memset(&p_fieldinf_v2, 0, sizeof(struct fieldinf_v));
	p_fieldinf_v2.fieldpos1 = 2;      /* ソートキー開始フィールド:2フィールド目 */
	p_fieldinf_v2.bytepos1 = 0;       /* ソートキー開始バイト位置:0バイト目 */
	p_fieldinf_v2.fieldpos2 = 3;      /* ソートキー終了フィールド:3フィールド目 */
	p_fieldinf_v2.bytepos2 = 0;       /* ソートキー終了バイト位置:0バイト目 */
	p_fieldinf_v2.csoption = CS_NUM;  /* キー比較時オプション:数値比較 */

  /* オプションテーブル */
  memset(&p_optiontbl, 0, sizeof(struct optiontbl));
  p_optiontbl.exerep = &p_exerep;

  /* 実行情報出力テーブル */
  memset(&p_exerep, 0, sizeof(struct reporttbl));
  p_exerep.stdiof = 0x01;             /* 標準出力へ出力 */
  p_exerep.title = "===== VRVF file interface sample program =====";

  /* 入力ファイルテーブル */
  memset(&p_infiletbl, 0, sizeof(struct infiletbl));
  p_infiletbl.filespec_i_num = 1;       /* 入力ファイル数 */

  p_infiletbl.filespec_i[0] = &p_filespec_i;
	memset(&p_filespec_i, 0, sizeof(struct filespec_i));
	p_filespec_i.pathname = "exp.in";   /* 入力ファイル名 */
	p_filespec_i.filetype = STM;        /* ファイルタイプ */

  /* 出力ファイルテーブル */
  memset(&p_otfiletbl, 0, sizeof(struct otfiletbl));
  p_otfiletbl.filespec_o_num = 1;       /* 出力ファイル数 */

  p_otfiletbl.filespec_o[0] = &p_filespec_o;
	memset(&p_filespec_o, 0, sizeof(struct filespec_o));
	p_filespec_o.pathname = "exp.out";  /* 出力ファイル名 */
	p_filespec_o.filetype = STM;        /* ファイルタイプ */

  /*****************/
  /*    ソート処理開始    */
  /*****************/

  nsort_init(&p_intftbl, &p_fieldtbl_v, &p_optiontbl, &p_infiletbl, &p_otfiletbl);
  if (p_intftbl.errinfo.status != 0)
  {
	/* ソートエラー */
	fprintf(stderr, "error status = %d¥n", p_intftbl.errinfo.status);
	return 1;
  }
  fprintf(stderr, "nsort end¥n");
  return 0;
}