Please note that JavaScript and style sheet are used in this website,
Due to unadaptability of the style sheet with the browser used in your computer, pages may not look as original.
Even in such a case, however, the contents can be used safely.

Empowered by Innovation NEC

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;
}