SORTKIT(UNIX版、Linux版) Cプログラミング例

/*                              */
/* 固定長レコード固定長キーの入出力ファイルインタフェース  */
/* サンプルプログラム                    */
/*                              */
/* 入力ファイル : 実行時にファイル名とレコード長指定   */
/* 出力ファイル : nsort-out           */
/* ソートキー  : 先頭5バイト(1バイト文字)      */
/*                              */

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

/* パラメータテーブル領域 */
struct intftbl    p_intftbl;
struct fieldtbl_f p_fieldtbl_f;
struct fieldinf_f p_fieldinf_f;
struct optiontbl  p_optiontbl;
struct reporttbl  p_exerep;
struct infiletbl  p_infiletbl;
struct filespec_i p_filespec_i;
struct filespec_o p_filespec_o;
struct otfiletbl  p_otfiletbl;

int main()
{
  char     s[50];
  char     w_fname[101];
  int      w_recsz;

  /* 入力ファイル名・レコード長セット */
  fprintf(stderr,"固定長レコード/固定長キーのテスト¥n");
  fprintf(stderr,"入力ファイル名:");
  fgets(w_fname, 100, stdin);
  w_fname[strlen(w_fname)-1] = '¥0'; /* 改行コード削除 */
  fprintf(stderr,"レコード長:");
  w_recsz = atoi(gets(s));

  /* テーブル初期値セット */
  /* インタフェーステーブル */
  memset(&p_intftbl, 0, sizeof(p_intftbl));
	p_intftbl.recform = FRFF; /* 固定長レコード/固定長キー */
	p_intftbl.maxrecsiz = w_recsz; /* レコード長 */

  /* フィールドテーブル */
  memset(&p_fieldtbl_f, 0, sizeof(p_fieldtbl_f));
	p_fieldtbl_f.fieldinf_num = 1;
	p_fieldtbl_f.fieldinf_f[0] = &p_fieldinf_f;
  memset(&p_fieldinf_f, 0, sizeof(p_fieldinf_f));
	p_fieldinf_f.fieldsize = 5; /* 5バイト */
	p_fieldinf_f.fieldtype = CH; /* 1バイト文字 */

  /* オプションテーブル */
  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.title = "===== サンプルプログラム =====";

  /* 入力ファイルテーブル */
  memset(&p_infiletbl, 0, sizeof(p_infiletbl));
	p_infiletbl.filespec_i_num = 1;
	p_infiletbl.filespec_i[0] = &p_filespec_i;
  memset(&p_filespec_i, 0, sizeof(p_filespec_i));
	p_filespec_i.pathname = w_fname; /* 入力ファイル名 */
	p_filespec_i.filetype = SEQ;

  /* 出力ファイルテーブル */
  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 = "nsort-out"; /* 出力ファイル名 */
	p_filespec_o.altfile = "alt";
	p_filespec_o.filetype = SEQ;

  /* ソート実行 */
  nsort_init(&p_intftbl,(void *)&p_fieldtbl_f,&p_optiontbl,&p_infiletbl,&p_otfiletbl);
  if (p_intftbl.errinfo.status != 0)
  {
	fprintf(stderr,"error status = %d¥n",p_intftbl.errinfo.status);
	return 1;
  }
  return 0;
}