/* 可変長レコード可変長フィールドの入出力ファイルインタフェース */
/* サンプルプログラム */
/* */
/* 入力ファイル : 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;
}