发信人: yangcs() 
整理人: yangcs(2000-01-21 09:33:27), 站内信件
 | 
 
 
    前两天我为了把一个文件里一堆汉字字符串替换成其它字符串,如:
 把汉字表线替换成+-|,我曾经有个替换程序,把一个文件里一堆字符串
 替换成其它字符串,但可能对汉字可能会换错,于是重编一个程序,贴上
 给大家共享。
 
 # include <stdio.h>
 # define N 1000
 main(n,v)
 int n;
 unsigned char *v[];
 {
 unsigned char c1,c2;
 int i,k,m,m0;
 long j,kk;
 unsigned char s[N],t[N],*x,*y;
 FILE *fp;
 if(n!=4)
   {
   puts("命令格式: CTH 文件名 原字符串 新字符串");
   exit(1);
   }
 
 if((fp=fopen(v[1],"r+b"))==NULL)
   {
   printf("文件%s没找到!\n",v[1]);
   exit(2);
   }
 
 sscanf(v[2],"%s",s);
 sscanf(v[3],"%s",t);
 for(m=0,x=s,y=s;*x;)
    {
    if(*x=='\\')
      {
      c1=*(++x);
      c2=*(++x);
      ++x;
      *y++= (char)(to16c(c1) <<4) | to16c(c2);
      }
    else
      *y++ = *x++;
    ++m;
    }
 *y=0;
 
 for(m0=0,x=t,y=t;*x;)
    {
    if(*x=='\\')
      {
      c1=*(++x);
      c2=*(++x);
      ++x;
      *y++=(char) (to16c(c1) << 4) | to16c(c2);
      }
    else
      *y++=*x++;
    m0++;
    }
 *y=0;
 
 
 if(m!=m0)
   {
   puts("字符串不等长!");
   exit(3);
   }
 
 j=0l; k=0;
 kk=0;
 while(fread(&c1,1,1,fp)>0)
    {
    if(c1==s[k])
      k++;
    else
      {
      j++;
      if(k)
        {
        if(s[0]>=160)
 	 j++;
        k=0;
        }
      else
        {
        if(c1>=160)
 	 j++;
        }
      fseek(fp,j,0);
 
      }
   if(k==m)
        {
        fseek(fp,j,0);
        fwrite(t,1,m,fp);
        k=0;kk++;j+=(long)m;
        fseek(fp,j,0);
        }
    }
 printf("项数:  %ld\n",kk);
 fclose(fp);
 }
 
 to16c(c)
 char c;
 {
 char i,j,k;
 k=0;
 j=c&0xdf;
 if((j>='A') && (j<='F'))
    k=10+j-'A';
 if((c>='0') && (c<='9'))
    k=c-'0';
 return(k);
 }
 
  --     欢迎到DOS版讨论一些核心问题和简单问题。
     那里有一只老羊——哈哈,天使——一条狼。
  ※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 210.72.45.132]
  | 
 
 
 |