?? as49atsb.cpp
字號:
//FORMAT CONVETER PROGRAME 格式轉換程序
//conveter text file to dbf file 轉換文本文件到數據庫文件
//source file : HM.TXT
//relation file:_SQREDB1.HED
//output file :SQRESPES.DBF
#define SOURFILE ""
#define DTBFFILE ""
#define SPACE " "
#define ESC 0x1b
#define FIELDNUM 9 //總字段數
#define FIELDLEN 8
#define HeadMark "012 "
//#define HeadMark "012 007"
//#define HeadMark "000012 "
#define lenBuff 2048
#define lenHead 800
#define lenRec 268
#define offsetAN 51 //A-Sub Number,Right justified
#define offsetBN 72 //B-Sub Number,Right justfied
#define offsetDate 146 //Date for start of Charging
#define offsetST 152 //Time for start of Charging
#define offsetET 158 //Time for stop of Charging
#define offsetCD 170 //Chargable Duration
#define numberRB 7
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <ctype.h>
void _szx_disp(void);
char * findMark(char*,char*,int,int);
main(char argc,char *argv[])
{
FILE *fi_obj,*fi_hed,*fo_dbf;
long i,m,n,x,y,z,o,p,q;
long counter;
long char *counterstr=" ";
long char BillHead[lenHead];
long char *sourbuff;
long char *ptrRec;
long char *ptrbuff;
long fpos;
long char recbuff[lenRec];
long char *an=" ",*bn=" ";
long char *date=" ",*st=" ",*et=" ",*cd=" ";
long char recstr[lenRec];
char c;
long char parm1[8][10],JuTou[10],yyh[10];
long char output[8][10];
long char filename1[80]=SOURFILE;
long char filename3[80]=DTBFFILE;
long char *ptr_str;
union lcnt{
long lgcnt;
char chcnt[4];
}count;
//Check Command Line Parameter
if(argc<3){
_szx_disp();
printf("\nPress ESC key exit.\n");
do{}while(getch()!=ESC);
return (-300);
}
else {
strcpy(filename1,argv[1]);
strcpy(filename3,argv[2]);
}
//Error Handler
if ((fi_obj=fopen(filename1,"rb"))==0){
_szx_disp();
printf("\nPress ESC key exit.\n");
do{}while(getch()!=ESC);
return(-301);
}
//Error Handler
if ((fo_dbf=fopen(filename3,"wb+"))==0){
_szx_disp();
printf("\nPress ESC key exit.\n");
do{}while(getch()!=ESC);
return(-303);
}
fseek(fi_obj,0,SEEK_SET); fseek(fo_dbf,0,SEEK_SET);
//flash Buffer
clrscr();
_szx_disp();
counter=0;
i=0; //Line counter of source file //I 字段計數器
fgets(BillHead,lenHead+1,fi_obj);//Read Charging File Head
//Main Loop
if ((sourbuff = (char *) malloc(lenBuff+1)) == NULL)
{
printf("Not enough memory to allocate buffer\n");
exit(1); /* terminate program if out of memory */
}
ptrbuff=sourbuff; //save buffer pointer
//x=ptrbuff+lenBuff-ptrRec;
//y=sourbuff-ptrbuff; z=ptrRec-ptrbuff;
for(m=0;m<lenBuff;m++)sourbuff[m]=NULL;
for(m=0;m<lenRec;m++)recbuff[m]=NULL;
while(!(feof(fi_obj)))
{
fread(sourbuff,lenBuff,1,fi_obj); //Get Data to Buffer
i=0;
for(;;)
{
//x=ptrbuff+lenBuff-ptrRec;
//y=sourbuff-ptrbuff;z=ptrRec-ptrbuff;
if(sourbuff[0])
{ //ptrRec=strstr(sourbuff,HeadMark); //Search Record head
ptrRec=findMark(sourbuff,HeadMark,lenBuff,strlen(HeadMark));
//if(ptrRec==NULL) //No found record head
// sourbuff++; //move buff pointer,find next
if(sourbuff-ptrbuff>lenBuff-lenRec)//Near Buff end
// sourbuff[0]=0;
{ fpos=ftell(fi_obj);
fseek(fi_obj,fpos-(sourbuff-ptrbuff),SEEK_SET);
sourbuff=ptrbuff; //Restore buffer pointer
fread(sourbuff,lenBuff,1,fi_obj); //Get Data to Buffer
}
//{ sourbuff=ptrbuff;
// fpos=ftell(fi_obj);
// fseek(fi_obj,fpos-(lenBuff-(ptrRec-ptrbuff))+lenRec,SEEK_SET);
//}
ptrRec=ptrRec-3;
}
//else ptrRec=NULL;
//z=ptrRec-ptrbuff;
//i=lenRec;
//if(ptrbuff+lenBuff-ptrRec<440) //Next Buffer&File Pointer Modify
if(sourbuff[0]==0)
{
fpos=ftell(fi_obj);
//x=ptrbuff+lenBuff-ptrRec;
//y=sourbuff-ptrbuff; z=ptrRec-ptrbuff;
fseek(fi_obj,fpos-(lenBuff-(ptrRec-ptrbuff))+lenRec,SEEK_SET);
c=0;
//if (counter>3499)
// c=0;
while(c==0)
{ c=fgetc(fi_obj);
//fpos=ftell(fi_obj);
};
fseek(fi_obj,ftell(fi_obj)-1,SEEK_SET);
//fpos=ftell(fi_obj);
sourbuff=ptrbuff; //Restore buffer pointer
fread(sourbuff,lenBuff,1,fi_obj); //Get Data to Buffer
i=0;
if(feof(fi_obj))break;
continue;
}
if (ptrRec)
{
i++;
for(n=0;n<10;n++) an[n]=ptrRec[offsetAN+n];
for(n=0;n<18;n++) bn[n]=ptrRec[offsetBN+n];
for(n=0;n<6;n++)
{
date[n]=ptrRec[offsetDate+n];
st[n]=ptrRec[offsetST+n];
et[n]=ptrRec[offsetET+n];
cd[n]=ptrRec[offsetCD+n];
}
counter++; //Output Record
gotoxy(40,20); //clrscr();
ltoa(counter,counterstr,10);
printf("Record:%s",counterstr);
fprintf(fo_dbf,"%s %s %s %s %s %s\r\n",an,bn,date,st,et,cd);
}
//fpos=ftell(fi_obj);
if(ptrRec==NULL)
m=1;
else
m=lenRec; //ptrRec-sourbuff+lenRec;
sourbuff=sourbuff+m; //lenRec;
}; // End While
free(ptrbuff);
fclose(fi_obj);
fclose(fo_dbf);
return(0);
}
void _szx_disp(void)
{
printf("Convert Program. Write by SunZhengxin .1999.");
printf("\n\rConvert Tape file to Format Textfile .");
printf("\n\r!!!For Ericsson As49 ChargBill Only!!!");
printf("\r\nFormat:\r\n\tAS49ATSBILL.EXE [billfile] [outfile]");
printf("\r\r");
printf("\r\n\nExample:Convert.EXE Bill225 OutBill225");
printf("\r\n\n\n");
}
char *findMark(char *buff, char *mark,int bufflen,int marklen)
{
long int i,m,n;
i=0; m=0; // n=0;
for (i=0;i<marklen;i++)
{ if(buff[m+i]==mark[i])
continue;
else
{ m++;
i=-1;
if(m>bufflen)return NULL;
else continue;
}
}
return buff+m;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -