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