- 论坛徽章:
- 15
|
本帖最后由 yulihua49 于 2012-06-13 15:30 编辑
blackuhlan 发表于 2012-06-12 19:31 ![]()
采用配置文件,根据配置文件生成数据文件,可以避免很多代码修改。特别是生成格式打印文件时特别有用。
用模板。或用元数据文件生成模板。
或用数据库表结构生成模板。
-bash-3.00$ mkpatt.sh
输入表名: cm_station
T_PkgType CM_STATION_tpl[]={
{CH_SHORT,sizeof(short),"station_code",0,-1},
{CH_CHAR,51,"station_name"},
{CH_CHAR,51,"en_name"},
{CH_SHORT,sizeof(short),"line_no"},
{CH_SHORT,sizeof(short),"sequence"},
{CH_INT,sizeof(int),"ergcode"},
{CH_SHORT,sizeof(short),"acccode"},
{CH_INT,sizeof(int),"updistance"},
{CH_INT,sizeof(int),"downdistance"},
{CH_INT,sizeof(int),"downruntime"},
{CH_INT,sizeof(int),"downstoptime"},
{CH_INT,sizeof(int),"upruntime"},
{CH_INT,sizeof(int),"upstoptime"},
{CH_TINY,1,"station_type"},
{CH_TIME,sizeof(INT64),"beg_time",YEAR_TO_SEC},
{CH_CHAR,16,"version_sn"},
{-1,0,"CM_STATION","acccode|beg_time|"}
};
extern T_PkgType CM_STATION_tpl[];
typedef struct {
short station_code;
char station_name[51];
char en_name[51];
short line_no;
short sequence;
int ergcode;
short acccode;
int updistance;
int downdistance;
int downruntime;
int downstoptime;
int upruntime;
int upstoptime;
char station_type;
INT64 beg_time;
char version_sn[16];
} CM_STATION_stu;
是这个表:
drop table cm_station;
CREATE TABLE "CMS_ACC"."CM_STATION"
( "STATION_CODE" number(4),
"STATION_NAME" VARCHAR2(50),
"EN_NAME" VARCHAR2(50),
"DESCRIPTION" VARCHAR2(39),
"LINE_NO" number(3),
"SEQUENCE" NUMBER(3,0),
"ERGCODE" NUMBER(9,0),
"ACCCODE" NUMBER(5,0),
"UPDISTANCE" NUMBER(5,0),
"DOWNDISTANCE" NUMBER(5,0),
"DOWNRUNTIME" NUMBER(5,0),
"DOWNSTOPTIME" NUMBER(5,0),
"UPRUNTIME" NUMBER(5,0),
"UPSTOPTIME" NUMBER(5,0),
"STATION_TYPE" NUMBER(1), -- 0:无效站,1:普通站,2:换乘站
"BEG_TIME" date, -- 记录生效时刻,YYYY-MM-DD HH24:MI:SS
"VERSION_SN" VARCHAR2(15), -- 版本集号 YYYY-MM-DD_NUM
primary key (ACCCODE,BEG_TIME)
);
程序:
CM_STATION_stu sta;
char buf[1024];
//对sta赋值或从数据库读入
net_pack(buf,sta,CM_STATION_tpl);//这就是楼主所要的功能了,可以发到网络或写到文件。
就是这东东:
65|和平里北街|Hepinglibeijie|5|11|150996265|541|1059|1151|104|30|93|30|1|2011-01-01 00:00:00||
38|雍和宫|Yonghegong|5|12|150996267|543|1151|866|85|50|98|50|2|2011-01-01 00:00:00||
67|北新桥|Beixinqiao|5|13|150996269|545|866|791|74|30|81|30|1|2011-01-01 00:00:00||
上面的模板可以自动生成如下语句:
SELECT station_code,station_name,en_name,line_no,sequence,ergcode,acccode,updistance,downdistance,downruntime,downstoptime,
upruntime,upstoptime,station_type,TO_CHAR(beg_time,'YYYY-MM-DD HH24:MI:SS') beg_time,version_sn
FROM CMS_ACC.CM_STATION order by acccode,beg_time desc
它的结果集可以映像到上述结构。
|
|