精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>电脑技术>>○ DOS>>工具箱>>字符串替换

主题:字符串替换
发信人: 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]

[关闭][返回]