📄 as49atsb1.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 "000012 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);
main(char argc,char *argv[])
{
FILE *fi_obj,*fi_hed,*fo_dbf;
long i,m,n,x,y,z;
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
//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;
while(c==0)
{ c=fgetc(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
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
//if (counter>110000) break;
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=ptrRec-sourbuff+lenRec;
if (i<7)
sourbuff=sourbuff+m;
else
{ i=0;
sourbuff=sourbuff+lenRec;
}
}// End For(;;)
// numbps=atol(parm1[3]);ltoa(numbs+j,chrpar0,10);
}; // End While
free(ptrbuff);
fclose(fi_obj);
fclose(fo_dbf);
return(0);
}
void _szx_disp(void)
{
printf("Convert Program. Write by SunZhengxin .1997.");
printf("\n\rConvert Text file to Format file .");
printf("\n\r!!!For Ericsson As49 ChargMeter Only!!!");
printf("\r\nFormat:\r\n\tAS49CConvert.EXE [textfile] [outfile]");
printf("\r\r");
printf("\r\n\nExample:Convert.EXE Meter225 OutMeter225");
printf("\r\n\n\n");
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -