?? agtpay.ec.bak
字號:
#include <stdio.h>
#include <math.h>
#include <time.h>
#include <varargs.h>
EXEC SQL include "dbbuf.h";
EXEC SQL include sqlca;
#define RETNAME "agt_ret.txt"
#define ERRNAME "errlog"
#define ZEROAMT 0.0001
void batlog();
char *rtrim();
char *strchr();
char *get_value();
int read_tot_line();
int read_body();
int
main(int argc, char * argv[])
{
EXEC SQL BEGIN DECLARE SECTION;
struct s_acc_bal acc_bal; /* 帳戶余額表結構 */
struct s_agt_payret agt_payret; /* 發放結果表結構 */
char database[20+1]; /* 數據庫名 */
EXEC SQL END DECLARE SECTION;
struct s_data_head datahead; /* 第一行匯總信息 */
struct s_data_body databody; /* 明細信息 */
char tmpstr[200+1];
long tot_num = 0; /* 總記錄條數 */
long suc_num = 0; /* 成功記錄數 */
long bad_num = 0; /* 失敗記錄數 */
long i = 0;
long ret = 0;
FILE * fp = NULL; /* 文件指針 */
memset(&acc_bal, 0, sizeof(struct s_acc_bal));
memset(&agt_payret, 0, sizeof(struct s_agt_payret));
memset(&datahead, 0, sizeof(struct s_data_head));
memset(&databody, 0, sizeof(struct s_data_body));
memset(tmpstr, 0, sizeof(tmpstr));
memset(database, 0, sizeof(database));
/* 判斷參數是否合法 */
if (argc != 3 )
{
printf("Usge: agtpay database_name agt_pay.txt\n");
return (0);
}
fp = fopen(argv[2], "r");
if (fp == NULL)
{
batlog("打開文件失敗!file_name[%s] [%s][%d]", argv[2], __FILE__, __LINE__);
return (-1);
}
/* 打開數據庫 */
strcpy(database, argv[1]);
rtrim(database);
EXEC SQL DATABASE :database;
if (SQLCODE)
{
batlog("打開數據庫失敗!database_name[%s][%d] [%s][%d]", database, SQLCODE, __FILE__, __LINE__);
return (-1);
}
/* 讀取文件第一行匯總信息 */
if (fgets(tmpstr, sizeof(tmpstr), fp) == NULL)
{
batlog("文件可能為空!file_name[%s] [%s][%d]", argv[2], __FILE__, __LINE__);
fclose(fp);
return (-1);
}
ret = read_tot_line(tmpstr, &datahead);
if (ret < 0)
{
batlog("讀取文件匯總信息失敗!file_name[%s] [%s][%d]", argv[2], __FILE__, __LINE__);
fclose(fp);
return (-1);
}
/* 開始事務 */
EXEC SQL BEGIN WORK;
if (SQLCODE)
{
batlog("啟動事務失敗!sqlcode[%d] [%s][%d]", SQLCODE, __FILE__, __LINE__);
fclose(fp);
return (-1);
}
/* 逐條處理匯總信息 */
while(fgets(tmpstr, sizeof(tmpstr), fp) != NULL)
{
i++;
/* 取明細信息 */
ret = read_body(tmpstr, &databody);
if (ret < 0)
{
batlog("取得數據不合法!acc[%s][%i] [%s][%d]", databody.acc, i, __FILE__, __LINE__);
if( strlen(databody.acc) != 0 )
{
}
continue;
}
}
/* 生成結果文件 */
return (0);
}
/* 寫日志函數
* Function: batlog(char * fmt,...)
*/
void batlog(va_alist) /* va_alist = parameters table*/
va_dcl
{
va_list args;/* a varible in order to check parameters table */
char *sign,*fmt;
char err_str1[80],err_str2[80];
char outfile[80];
char *home;
FILE *logfd;
time_t itm;
struct tm *stm;
memset(err_str1,'-',79); err_str1[79]='\0';
memset(err_str2,'*',79); err_str2[79]='\0';
memset(outfile,0x0,80);
itm=time(&itm);
stm=localtime(&itm);
sprintf(outfile,"./%s", ERRNAME );
/* initial parameters table, set args at start of parameters table */
va_start(args);
if ((logfd=fopen(outfile,"a"))==NULL)
{
fprintf(stderr,"Error in open %s\n",outfile);
return;
}
fprintf(logfd,"%s\n",err_str2);
fprintf(logfd,"%4d/%02d/%02d %02d:%02d:%02d\n",\
stm->tm_year+1900,\
stm->tm_mon+1,stm->tm_mday,\
stm->tm_hour,stm->tm_min,stm->tm_sec);
fmt=va_arg(args,char *);
vfprintf(logfd,fmt,args);
fprintf(logfd,"\n%s\n",err_str1);
fflush(logfd);
va_end(args); /* clear parameters table */
fclose(logfd);
}
/* 去右空格函數
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -