发信人: yangcs()
整理人: yangcs(2000-01-21 09:32:59), 站内信件
|
好像以前灌过。
把一个文件中的字符串替换成其它字符串。用\0d等输入十六进制数。
作用:
1.改游戏经验值等;
2.工作里用,如把空格改成0:
TH FILE \20 0
以前用TPL时干过。
3.把“QUIT”改成“RETU”;
4.其它,如把一个可执行文件里的“C:”替换成“D:”。
# include <stdio.h>
# define N 1000
main(n,v)
int n;
char *v[];
{
char c1,c2;
int i,k,m,m0;
long j,kk;
char s[N],t[N],*x,*y;
FILE *fp;
if(n!=4)
{
puts("命令格式: TH 文件名 原字符串 新字符串");
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)
{
fseek(fp,j,0);
k=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]
|
|