c语言程序设计 TXT分类版

2025-05-04 20:54:25
推荐回答(1个)
回答1:

是TXT分割吗,我自己编了一个C程序:

#include

//#include

#include

#include 

int part_num[9999]={0};

char newname[8]="";

char p[8]={0,0,0,0,0,0,0,0};

void txt_wrte();

void int2str(int x);

void num2str(int x,int n,char p[8]);

main()

{

  FILE *fp;//文件指针fp

  

 int Bytenum=0,Bytenum2=0;

 int pnum=0;

 int pnum_p_part;

 int temp,i;

 

 char ch,key;

// char str[65536];

 

 char ffilename;

 char *filename;//="sq3.txt";

 char *pachname=".\\";

 char *endname=".txt";

 char fhead[32]="";

 char fullname[32]="";

 char filetemp[17]="";

 int szname;

 printf("输入文件名\n");

 printf("Input filename:\n");

// scanf("%s",&filename);//输入文件名

 for(temp=0;temp<16;temp++)

  {

  key=getchar();

  if(key=='\n')

  {break;}

  filetemp[temp]=key;

  //filename++;

  }

 printf("----------\n");

 filename=&filetemp;

 printf("----------\n");

 strcpy(fullname,pachname);//路径以及文件名拼接

 strcat(fullname,filename);

 strcpy(fhead,fullname);

 strcat(fullname,endname);

 printf("%s\n",fullname);

// fullname=strcat(pachname,filename);

 if((fp=fopen(fullname,"rt"))==NULL)

  {

  printf("can't open");

  getch();

  exit(1);

  }

 else

  {

  printf("open sucsessfuly!\n");

  }

//---------------------------------

 ch=fgetc(fp);

 while(ch!=EOF)

  {

   //putch(ch);

   ch=fgetc(fp);

   if(ch=='\n')

   {   

    pnum++;

   }

   //pnum*20000/(Bytenum)

   Bytenum++;

  }

 printf("\n该文件一共有 %d B(字节), %d 个段落.\n",Bytenum,pnum);

// printf("大约每 %d 段有 20KB.\n",pnum/(Bytenum/20000));//must >=20kB

 printf("大约每 %d 段有 20KB.\n",pnum*20000/(Bytenum));

 printf("分割成每个文件的段落数为:");

 scanf("%d",&pnum_p_part);

 printf("大约会有 %d 个文件生成.\n",pnum/pnum_p_part);

//----------------------------

  rewind(fp);

  ch=fgetc(fp);

  temp=0;i=0;

  Bytenum2=0;

  while(ch!=EOF)

  {

   

   ch=fgetc(fp);

   if(ch=='\n')

   {   

    temp++;//  '\n'的个数 

    if(temp%pnum_p_part==0)

    {

    part_num[i+1]=Bytenum2;//记录 \n 的位置    

    //printf("\n enter:%d\n",part_num[i]);

    i++;

    }

   }

   Bytenum2++;

   if(ch==EOF) part_num[i]=Bytenum2;

  }

//---------------------------------------

 // for(i=0;i<(pnum/pnum_p_part+1);i++)

 // {

 //  printf("\n enter:%d\n",part_num[i]);

 // }

//-----------------------------------------

   printf("----------\n");

   printf("----------\n");

 txt_wrte(filename,pnum/pnum_p_part,fp,part_num);

// fgets(str,i,fp);

 fclose(fp);

 while(!kbhit());

}

void txt_wrte(char *filename,int totalpartnum,FILE *fp,int part_num[9999])

{

 FILE *fp_pic;

 int i,j;

 int str_len;

 char ch_temp;

 

 rewind(fp);

 //fseek(fp,part_num[i],0);

 mkdir(".\\new");

 //num2str(totalpartnum,4,p);

 int2str(p,totalpartnum);

 printf("%s\n",p);

 

 strcpy(newname,".\\new\\");

 strcat(newname,filename);

 strcat(newname,"_");

 strcat(newname,p);

 //strcat(newname,".txt");

// printf("%s\n",newname);

 str_len=strlen(newname);

 for(i=0;i

 {

 // printf("%s\n",p);  

 

 //strcpy(newname,".\\new\\");

 strcat(newname,filename);

 strcat(newname,"_");

 

  for(j=0;j<8;j++) p[j]=0;  

  //for(j=0;j<8;j++) newname[j]=0;//clear space     

  

  strcpy(newname,""); 

  int2str(p,i);

  strcpy(newname,".\\new\\");

  //strcat(newname,filename);

 strcat(newname,p);

 strcat(newname,".txt");

 printf("%s\n",newname);

 

 if((fp_pic=fopen(newname,"wt"))==NULL)

  {

  printf("can't open");

  getch();

  exit(1);

  }

 else

  {

  printf("open sucsessfuly!\n");

  

  for(j=0;j<(part_num[i+1]-part_num[i]);j++)//write byte

   {

   ch_temp=fgetc(fp);

   fputc(ch_temp,fp_pic);

   }

  

  }

 fclose(fp_pic);

 }

 

}

/*void num2str(int x,int n,char p[8])

{

 

// char *pp=p[0];

 static char num_str[11]={"0123456789"};

 if(n==1)

 {p[0]=num_str[x%10];}

 else if (n==2)

 {

  p[0]=num_str[(x%100)/10];

  p[1]=num_str[x%10];

 }

 else if (n==3)

 {

  p[0]=num_str[(x%1000)/100];

  p[1]=num_str[(x%100)/10];

  p[2]=num_str[x%10];

 }

 else if (n==4)

 {

  p[0]=num_str[(x%10000)/1000];

  p[1]=num_str[(x%1000)/100];

  p[2]=num_str[(x%100)/10];

  p[3]=num_str[x%10];

 }

 else

  exit(1);

//printf("%c%c%c%c\n",p[0],p[1],p[2],p[3]);

// return pp;

}*/

void int2str(char p[8],int x)

{

 //static 

  //char tempre[5]="";

  p[0]=(x%10000)/1000+48;

  p[1]=(x%1000)/100+48;

  p[2]=(x%100)/10+48;

  p[3]=x%10+48;

  p[4]='\0';

  //p=tempre;

// return tempre;

}