发信人: 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]
|
|