📄 file_com.cpp
字号:
#include "File_Com.h"
int File_Create::Set_Env( char *odir )
{
int i;
strcpy( Work_Dir,odir );
i = strlen( Work_Dir );
if( Work_Dir[i-1] != '/' ) { Work_Dir[i] = '/'; Work_Dir[i+1] = 0; }
if( chdir( Work_Dir ) ) {
sprintf( tmpss,"CheckDir %s in Set_Env Err",Work_Dir );
PTrace( TIMEDEBUG,tmpss ); return(i);
}
return(0);
}
int File_Create::CheckDir( char *dir )
{
int i;
i = strlen( dir );
if( dir[i-1] != '/' ) { dir[i] = '/'; dir[i+1] = 0; }
if( chdir( dir ) ) {
if( mkdir( dir,S_IRWXU|S_IRGRP|S_IXGRP ) ) {
sprintf( tmpss,"OutPut Directory %s don't find",dir );
PTrace( ERRDEBUG,tmpss ); return( DIR_NOFIND );
}
}
return(0);
}
int File_Create::Check_Date_Dir( char *_ym,char *_day )
{
int i;
char f1[400];
sprintf( f1,"%s%s/",Work_Dir,_ym );
if( i = CheckDir( f1 ) ) {
sprintf( tmpss,"Check1Dir %s in Check_Date_Dir Err",f1 );
PTrace( TIMEDEBUG,tmpss ); return(i);
}
sprintf( f1,"%s%s/%s/",Work_Dir,_ym,_day );
if( i = CheckDir( f1 ) ) {
sprintf( tmpss,"Check2Dir %s in Check_Date_Dir Err",f1 );
PTrace( TIMEDEBUG,tmpss ); return(i);
}
return(0);
}
int _BufsCmpProc( const void *s1,const void *s2 )
{
char *ss1,*ss2;
ss1 = ( (_Deal_Buf *)s1 )->Date_Cmp;
ss2 = ( (_Deal_Buf *)s2 )->Date_Cmp;
return( strcmp(ss1,ss2) );
}
int Hex2Str( char *s1,int num,char *s2 )
{
int i,j,k,l;
for( i=0;i<num;i++ ) {
l = s1[i] & 0xff;
j = l / 16; k = l % 16;
if( j >= 10 ) { s2[2*i] = j + 55; }
else { s2[2*i] = j + 48; }
if( k >= 10 ) { s2[2*i+1] = k + 55; }
else { s2[2*i+1] = k + 48; }
}
return(0);
}
long Str2Hex( char *s1 )
{
long i;
i = (s1[0]-48)*65536+(s1[1]-48)*256+(s1[2]-48)*16+(s1[3]-48);
return(2*i);
}
long Hex2Num( char *s1,int num )
{
long i,j;
j = s1[0] & 0xff;
for( i=1;i<num;i++ ) {
j *= 256; j += ((long)s1[i]&0xff);
}
return(j);
}
int Long_To_Hex( long num,char *s1 )
{
int i;
s1[0] = num/16777216; i = num - s1[0]*16777216;
s1[1] = i/65535; i = i - s1[1]*65536;
s1[2] = i/256; s1[3] = i - s1[2]*256;
s1[4] = 0;
return(0);
}
int CallNo_To_BCD( char *callno,char *outno )
{
int i,j,k,l;
char s[80],ss[80],c,sss[800];
l = strlen( callno ); j = l/2; k = l%2;
for( i=0;i<j;i++ ) {
strncpy( s,callno+2*i,2 ); s[2] = 0;
ss[i] = (s[0]-48)*16+(s[1]-48);
}
if( k ) {
c = callno[2*j];
ss[j] = (c-48)*16+14;
j++;
}
for( i=j;i<12;i++ ) ss[i] = 238;
ss[12] = 0;
for( i=0;i<12;i++ ) outno[i] = ss[i];
outno[12]=0;
return(0);
}
long File_Create::Sort_File( char *fname )
{
long i,j;
FILE *fp9;
char bufs[900],callingno[40],pdate[20];
if( ( fp9 = fopen( fname,"r" ) ) == NULL ) {
printf( "open data file %s err!\n",fname );
return( OPEN_FILE_ERR );
}
i = 0;
while( fgets( bufs,800,fp9 ) != NULL ) {
if( strlen( bufs ) < 10 ) continue;
if( !strncmp( bufs,"wEND",4 ) ) continue;
strcpy( Deal_Bufs[i].Bufs,bufs );
Get_CallingNo( bufs,callingno ); Get_PhoneDate( bufs,pdate );
sprintf( Deal_Bufs[i].Date_Cmp,"%s%s",pdate,callingno );
CallNo_To_BCD( callingno,Deal_Bufs[i].Comp_Idx );
i++;
if( i >= Max_Bufs ) return( BUFLEN_ABOUT );
}
fclose( fp9 );
if( !i ) return(i);
qsort( &Deal_Bufs[0],i,sizeof( struct _Deal_Buf ),_BufsCmpProc );
return(i);
}
int File_Create::CreateFile( char *_dir,char *fname )
{
long i,j,k,Lens,fpos,fsize;
FILE *fp8,*fp9;
char _IDir[400],f1[400],_ym[10],_day[10];
char Date_Comp[10],_fname[200],Calling_Comp[40],callingno[40],_pos[80];
fpos = 0; CDir_Nums = 0;
strcpy( Date_Comp,"000000" ); strcpy( _IDir,_dir );
strcpy( _fname,fname ); _fname[strlen(fname)-4] = 0;
if( i = CheckDir( _IDir ) ) return(i);
sprintf( f1,"%s%s",_IDir,fname );
if( ( Lens = Sort_File( f1 ) ) < 0 ) {
sprintf( tmpss,"Sort File %s Err! Code=%d=",f1,Lens );
PTrace( TIMEDEBUG,tmpss ); return( CREATEFILE_ERR );
}
/*
GetTime(0); sprintf( tmpss,"Sort File End at Time=%s-%s",opdate,optime );
PTrace( TIMEDEBUG,tmpss );
*/
for( i=0;i<Lens;i++ ) {
if( strncmp( Date_Comp,Deal_Bufs[i].Date_Cmp,8 ) ) {
if( strcmp( Date_Comp,"000000" ) ) {
fsize = ftell( fp8 ) + 17;
if( fprintf( fp8,"wEND%012ld\n",fsize ) < 0 ) {
sprintf( tmpss,"Fprintf File Err" );
PTrace( ERRDEBUG,tmpss );
fclose(fp8); fclose(fp9); return(-1);
}
fclose( fp8 ); fclose(fp9);
}
strncpy( Date_Comp,Deal_Bufs[i].Date_Cmp,8 ); Date_Comp[8] = 0;
strcpy( _ym,Date_Comp ); _ym[6] = 0;
strcpy( _day,Date_Comp+6 ); _day[2] = 0;
if( j = Check_Date_Dir( _ym,_day ) ) return(j);
sprintf( f1,"%s%s/%s/%s",Work_Dir,_ym,_day,fname );
if( ( fp8 = fopen( f1,"w" ) ) == NULL ) {
sprintf( tmpss,"open file %s err!",f1 );
PTrace( ERRDEBUG,tmpss ); return( OPEN_FILE_ERR );
}
sprintf( f1,"%s%s/%s/%s.IDX",Work_Dir,_ym,_day,_fname );
if( ( fp9 = fopen( f1,"w" ) ) == NULL ) {
sprintf( tmpss,"open Idx file %s err!",f1 );
PTrace( ERRDEBUG,tmpss ); fclose(fp8); return( OPEN_FILE_ERR );
}
sprintf( Complete_Dir[CDir_Nums],"%s%s/%s/",Work_Dir,_ym,_day );
strcpy( Calling_Comp,"!!!!!!" ); fpos = 0; CDir_Nums++;
}
if( fprintf( fp8,"%s",Deal_Bufs[i].Bufs ) < 0 ) {
sprintf( tmpss,"Fprintf fp8 Err!" );
PTrace( ERRDEBUG,tmpss );
fclose(fp8); fclose(fp9); return(-2);
}
Get_CallingNo( Deal_Bufs[i].Bufs,callingno );
/*
sprintf( tmpss,"calling=%s,%s=",Calling_Comp,callingno );
PTrace( TIMEDEBUG,tmpss );
*/
if( strcmp( Calling_Comp,callingno ) ) {
Long_To_Hex( fpos,_pos );
if( fprintf( fp9,"%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
Deal_Bufs[i].Comp_Idx[0],Deal_Bufs[i].Comp_Idx[1],
Deal_Bufs[i].Comp_Idx[2],Deal_Bufs[i].Comp_Idx[3],
Deal_Bufs[i].Comp_Idx[4],Deal_Bufs[i].Comp_Idx[5],
Deal_Bufs[i].Comp_Idx[6],Deal_Bufs[i].Comp_Idx[7],
Deal_Bufs[i].Comp_Idx[8],Deal_Bufs[i].Comp_Idx[9],
Deal_Bufs[i].Comp_Idx[10],Deal_Bufs[i].Comp_Idx[11],
_pos[0],_pos[1],_pos[2],_pos[3] ) < 0 ) {
sprintf( tmpss,"Fprintf fp8 Err!" );
PTrace( ERRDEBUG,tmpss );
fclose(fp8); fclose(fp9); return(-2);
}
/*
sprintf( tmpss,"%s=%ld=",callingno,fpos );
PTrace( TIMEDEBUG,tmpss );
*/
strcpy( Calling_Comp,callingno );
}
fpos = ftell( fp8 );
/*
sprintf( tmpss,"new_fpos=%ld=\n\n",fpos );
PTrace( TIMEDEBUG,tmpss );
*/
}
if( i ) {
fsize = ftell( fp8 ) + 17;
if( fprintf( fp8,"wEND%012ld\n",fsize ) < 0 ) {
sprintf( tmpss,"Fprintf File Err" );
PTrace( ERRDEBUG,tmpss );
fclose(fp8); fclose(fp9); return(-1);
}
fclose( fp8 ); fclose( fp9 );
}
File_Lens = Lens;
/*
GetTime(0); sprintf( tmpss,"Deal File End at Time=%s-%s",opdate,optime );
PTrace( TIMEDEBUG,tmpss );
*/
return(0);
}
int File_Create::Init_DealOneRecord( char *odir )
{
int i;
strcpy( Work_Dir,odir );
i = strlen( Work_Dir );
if( Work_Dir[i-1] != '/' ) { Work_Dir[i] = '/'; Work_Dir[i+1] = 0; }
if( chdir( Work_Dir ) ) {
sprintf( tmpss,"CheckDir %s in Set_Env Err",Work_Dir );
PTrace( TIMEDEBUG,tmpss ); return(i);
}
GetTime(0);
sprintf( tmpss,"CreateFile Begin at Time=%s-%s",opdate,optime );
PTrace( TIMEDEBUG,tmpss );
CDir_Nums = 0; File_Lens = 0;
return(0);
}
int File_Create::Insert_OneRecord( char *bufs )
{
long i;
char pdate[80],callingno[80];
strcpy( Deal_Bufs[File_Lens].Bufs,bufs );
Get_CallingNo( bufs,callingno ); Get_PhoneDate( bufs,pdate );
sprintf( Deal_Bufs[File_Lens].Date_Cmp,"%s%s",pdate,callingno );
CallNo_To_BCD( callingno,Deal_Bufs[File_Lens].Comp_Idx );
File_Lens++;
if( File_Lens >= Max_Bufs ) return( BUFLEN_ABOUT );
return(0);
}
int File_Create::Complete_DealOneRecord( char *fname )
{
long i,j,fsize,fpos;
FILE *fp8,*fp9;
char f1[400],_ym[10],_day[10],_fname[800];
char Date_Comp[10],Calling_Comp[40],callingno[40],_pos[80];
strcpy( Date_Comp,"000000" ); fpos = 0;
qsort( &Deal_Bufs[0],File_Lens,sizeof( struct _Deal_Buf ),_BufsCmpProc );
strcpy( _fname,fname ); _fname[strlen(fname)-4] = 0;
for( i=0;i<File_Lens;i++ ) {
if( strncmp( Date_Comp,Deal_Bufs[i].Date_Cmp,8 ) ) {
if( strcmp( Date_Comp,"000000" ) ) {
fsize = ftell( fp8 ) + 17;
if( fprintf( fp8,"wEND%012ld\n",fsize ) < 0 ) {
sprintf( tmpss,"Fprintf File Err" );
PTrace( ERRDEBUG,tmpss );
fclose(fp8); fclose(fp9); return(-1);
}
fclose( fp8 ); fclose(fp9);
}
strncpy( Date_Comp,Deal_Bufs[i].Date_Cmp,8 ); Date_Comp[8] = 0;
strcpy( _ym,Date_Comp ); _ym[6] = 0;
strcpy( _day,Date_Comp+6 ); _day[2] = 0;
if( j = Check_Date_Dir( _ym,_day ) ) return(j);
sprintf( f1,"%s%s/%s/%s",Work_Dir,_ym,_day,fname );
if( ( fp8 = fopen( f1,"w" ) ) == NULL ) {
sprintf( tmpss,"open file %s err!",f1 );
PTrace( ERRDEBUG,tmpss ); return( OPEN_FILE_ERR );
}
sprintf( f1,"%s%s/%s/%s.IDX",Work_Dir,_ym,_day,_fname );
if( ( fp9 = fopen( f1,"w" ) ) == NULL ) {
sprintf( tmpss,"open Idx file %s err!",f1 );
PTrace( ERRDEBUG,tmpss ); fclose(fp8); return( OPEN_FILE_ERR );
}
sprintf( Complete_Dir[CDir_Nums],"%s%s/%s/",Work_Dir,_ym,_day );
strcpy( Calling_Comp,"!!!!!!" ); CDir_Nums++;
}
if( fprintf( fp8,"%s",Deal_Bufs[i].Bufs ) < 0 ) {
sprintf( tmpss,"Fprintf fp8 Err!" );
PTrace( ERRDEBUG,tmpss );
fclose(fp8); fclose(fp9); return(-2);
}
Get_CallingNo( Deal_Bufs[i].Bufs,callingno );
if( strcmp( Calling_Comp,callingno ) ) {
Long_To_Hex( fpos,_pos );
if( fprintf( fp9,"%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c%c",
Deal_Bufs[i].Comp_Idx[0],Deal_Bufs[i].Comp_Idx[1],
Deal_Bufs[i].Comp_Idx[2],Deal_Bufs[i].Comp_Idx[3],
Deal_Bufs[i].Comp_Idx[4],Deal_Bufs[i].Comp_Idx[5],
Deal_Bufs[i].Comp_Idx[6],Deal_Bufs[i].Comp_Idx[7],
Deal_Bufs[i].Comp_Idx[8],Deal_Bufs[i].Comp_Idx[9],
Deal_Bufs[i].Comp_Idx[10],Deal_Bufs[i].Comp_Idx[11],
_pos[0],_pos[1],_pos[2],_pos[3] ) < 0 ) {
sprintf( tmpss,"Fprintf fp8 Err!" );
PTrace( ERRDEBUG,tmpss );
fclose(fp8); fclose(fp9); return(-2);
}
/*
if( fprintf( fp9,"%s:%012ld\n",callingno,fpos ) < 0 ) {
sprintf( tmpss,"Fprintf fp8 Err!" );
PTrace( ERRDEBUG,tmpss );
fclose(fp8); fclose(fp9); return(-2);
}
*/
strcpy( Calling_Comp,callingno );
}
fpos = ftell( fp8 );
}
if( i ) {
fsize = ftell( fp8 ) + 17;
if( fprintf( fp8,"wEND%012ld\n",fsize ) < 0 ) {
sprintf( tmpss,"Fprintf File Err" );
PTrace( ERRDEBUG,tmpss );
fclose(fp8); fclose(fp9); return(-1);
}
fclose( fp8 ); fclose( fp9 );
}
GetTime(0); sprintf( tmpss,"Deal File End at Time=%s-%s",opdate,optime );
PTrace( TIMEDEBUG,tmpss );
return(0);
}
void File_Create::Get_CallingNo( char *bufs,char *callingno )
{
strncpy( callingno,bufs,20 ); callingno[20] = 0;
DeleteSpace( callingno ); DeleteHSpace( callingno );
}
void File_Create::Get_PhoneDate( char *bufs,char *pdate )
{
strncpy( pdate,bufs+78,8 ); pdate[8] = 0;
DeleteSpace( pdate ); DeleteHSpace( pdate );
}
int File_Create::DeleteSpace( char *ss )
{
int i;
i = strlen(ss)-1;
while ( i && ss[i] == ' ' ) i--;
ss[i+1] = 0;
return(0);
}
int File_Create::DeleteHSpace( char *ss )
{
int i;
char ss1[80];
strcpy( ss1,ss ); i = 0;
while( ss1[i] == ' ' ) i++;
strcpy( ss,ss1+i );
return(0);
}
int File_Create::PTrace( int flag,char *buf )
{
int i;
char tt[80];
GetTime(0); sprintf( tt,"%s-%s",opdate,optime );
if( flag == ERRDEBUG ) {
GetTime(0);
printf( "********** %s(%d) **********\n",tt,getpid() );
printf( "%s,errno=%d=\n\n",buf,errno );
} else if( flag == TIMEDEBUG ) {
GetTime(0);
printf( "********** %s(%d) **********\n",tt,getpid() );
printf( "%s\n\n",buf );
} else printf( "%s\n",buf );
return(0);
}
int File_Create::GetTime( int num )
{
time_t timer;
struct tm nowtimer;
time( &timer ); timer += num;
nowtimer = *localtime ( &timer ); nowtimer.tm_mon++;
sprintf( optime,"%02u%02u%02u", nowtimer.tm_hour,nowtimer.tm_min ,
nowtimer.tm_sec );
sprintf( opdate,"%04u%02u%02u", nowtimer.tm_year+1900,nowtimer.tm_mon,
nowtimer.tm_mday );
return(0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -