该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
/* 显示程序的使用方法 */
void help()
{
printf("Usage : \nFind and/or replace a string in a text file\n");
printf("Syntex : \nFREP [replace string]\n");
exit();
}
/* 查找指定文件中的字符串 */
void find(flnm,searchstr)
char *flnm,*searchstr;
{
char str1[256];
unsigned int i,l;
FILE *f1;
if ((f1 = fopen(flnm,"r"))==NULL) {
printf("File not found !\n");
help();
}
l = 0;
do {
fgets(str1,256,f1); /* 从文件中读取一行 */
++l;
if (strstr(str1,searchstr)!=NULL) /* 有待查找的字符串吗? */
printf("[%s] Line : %d %s",flnm,l,str1); /* 显示该行内容 */
} while (! feof(f1));
fclose(f1);
}
/* 查找指定文件中的字符串,并替换 */
void replace(flnm,searchstr,replacestr)
char *flnm,*searchstr,*replacestr;
{
char str1[256],str2[256];
char *p1,*p2,*p3;
FILE *f1,*f2;
unsigned int i,fslen,i1,i2,i3;
char path[80],drive[3],dir[66],name[10],ext[5];
if ((f1 = fopen(flnm,"r"))==NULL) {
printf("File not found !\n");
help();
}
if ((f2 = fopen("temp","w+"))==NULL) {
printf("File not opened !\n");
help();
}
fslen=strlen(searchstr);
do {
fgets(str1,256,f1); /* 从文件中读取一行 */
i1=strlen(str1);
p1=str1;
p3=str2;
while (strstr(p1,searchstr)!=NULL) { /* 查找的字符串在该行中吗? */
p2 = strstr(p1,searchstr);
i2=strlen(p2);
i3=i1-i2;
p1+=i3;
for (i=0;i
while (*p3++ = *replacestr++); /* 复制替换字符串 */
p3-=1;
p1+=fslen;
}
while ((*p3++=*p1++)!='\0'); /* 复制该行中剩余的字符 */
fputs(str2,f2); /* 写文件 */
strcpy(str2,"");
} while (!feof(f1));
fclose(f1);
fclose(f2);
fnsplit(flnm,drive,dir,name,ext);
strcat(strcpy(str1,name),".bak");
if ((f1=fopen(str1,"r"))!=NULL) unlink(str1);
if (rename(flnm,str1)!=0) /* 原文件改名为同名的BAK文件 */
printf("Error : File [%s] cannot be not renamed to file [%s] !\n",flnm,str1);
else if (rename("temp",flnm)!=0) /* 将临时文件改名为原文件名 */
printf("Error : File [temp] cannot be not renamed to file [%s] !\n",flnm);
}
/* 主程序 */
main(argv,argc)
int argv;
char *argc[];
{
char *flnm,*searchstr,*replacestr;
unsigned int findb=0,replaceb=0;
printf("%s","FREP Version 1.1, Copyright (C) 1994,95 Dong Zhanshan\n");
switch (argv) {
case 3 : flnm = argc[1]; /* 查找字符串 */
searchstr = argc[2];
findb = 1;
break;
case 4 : flnm = argc[1]; /* 替换字符串 */
searchstr = argc[2];
replacestr = argc[3];
replaceb = 1;
break;
default : help();
}
if (flnm == "") help();
if (findb) find(flnm,searchstr);
if (replaceb) replace(flnm,searchstr,replacestr);
return 0;
}