⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 file_com.cpp

📁 根据用户号码和发生时间生成清单并高效建立索引的程序
💻 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 + -