SORTKIT(Windows版) Cプログラミング例

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

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

struct   intftbl      p_intftbl;          /* インタフェーステーブル */
struct   fieldtbl_v   p_fieldtbl_v;       /* フィールドテーブル(可変長キー) */
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(p_intftbl)) ;
  p_intftbl.recform = VRVF;      /* レコード/キー形式:可変長 */
  p_intftbl.maxrecsiz = 0;
  p_intftbl.minmemsiz = 64;      /* 最小メモリサイズ */
  p_intftbl.maxmemsiz = 1024;    /* 最大メモリサイズ */

  /* フィールドテーブル */
  memset(&p_fieldtbl_v,0,sizeof(p_fieldtbl_v)) ;
  p_fieldtbl_v.csoption = 0;        /* キー比較時オプション(グローバル):無し */
  p_fieldtbl_v.fieldinf_num = 2;    /* キー数 */
  p_fieldtbl_v.delimit = NULL;      /* フィールド分離文字:指定なし(ブランク) */
  p_fieldtbl_v.code = 0;            /* 文字コード:ASCII */
  p_fieldtbl_v.fieldinf_v[0] = &p_fieldinf_v1;  /* キー その1 */
  p_fieldtbl_v.fieldinf_v[1] = &p_fieldinf_v2;  /* キー その2 */
	memset(&p_fieldinf_v1,0,sizeof(p_fieldinf_v1)) ;
	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;     /* キー比較時オプション:なし */

	memset(&p_fieldinf_v2,0,sizeof(p_fieldinf_v2)) ;
	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(p_optiontbl)) ;
  p_optiontbl.exerep = &p_exerep;  /* 実行情報出力テーブルへのポインタ */

  /* 実行情報出力テーブル  */
  memset(&p_exerep,0,sizeof(p_exerep)) ;
  p_exerep.stdiof = 1;             /* 標準出力に出力する */
  p_exerep.rpfile = NULL;
  p_exerep.title = "===== VRVF file interface sample program =====";

  /* 入力ファイルテーブル */
  memset(&p_infiletbl,0,sizeof(p_infiletbl)) ;
  p_infiletbl.filespec_i_num = 1;       /* 入力ファイル数 */
  p_infiletbl.filespec_i[0] = &p_filespec_i;
  p_filespec_i.pathname = "exp1.in";    /* 入力ファイル名 */
  p_filespec_i.filetype = STM;          /* ファイルタイプ */

  /* 出力ファイルテーブル */
  memset(&p_otfiletbl,0,sizeof(p_otfiletbl)) ;
  p_otfiletbl.filespec_o_num = 1;       /* 出力ファイル数 */
  p_otfiletbl.filespec_o[0] = &p_filespec_o;
  memset(&p_filespec_o,0,sizeof(p_filespec_o)) ;
  p_filespec_o.pathname = "exp1.out";   /* 出力ファイル名 */
  p_filespec_o.altfile = NULL;
  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;
}