我有一个文本文件(names.txt),其名称如下:
mary
john
kj
mark
我试图将它们与另一个文本文件(records.txt)中的其他数据匹配,它看起来像这样:
mary jon mik 200 west 90
fgg gh 400 east 700
james ggg 890 south 800
john nike 556 4666
如果名称与records.txt中的整行匹配,则会读取names.txt并对records.txt运行名称。当我从CL一个接一个地提供名字时,没关系。但是当我从文本文件中调整代码来执行上述操作时,它不起作用。有人请指出我正确的方向。这是我的代码:< / p>
/*program to search for a given string from a file*/
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int usage(char*argv[]);
int main (int argc,char*argv[])
{
int flag=0,i=0;
FILE*fp,*lp;
char line[50];
char word[10];
lp=fopen(argv[1],"r");
fp=fopen(argv[2],"r");
if (argc!=3) {
usage(argv[0]);
exit(0);
}
if (lp==NULL || fp==NULL) {
perror("can't open file");
exit(1);
}
//getting words to search
while (fgets(word,10,lp)!=NULL) {
for(i=0;i<=strlen(word);i++){
if(word[i]=='\n'){
word[i]='\0';
break;
}
}
printf("searching for %s in %s ",word,argv[2]);
//searching in file
i=0;
while (fgets(line,50,fp)!=NULL) {
i++;
if(strstr(line,word)!=NULL){
printf("%s found in line %d\n%s.\n",word,i,line);
flag=1;
}
}
if(flag==0)
puts("no match found");
flag=0;
}
putchar('\n');
exit(0);
}
int usage(char*argv[])
{
printf("usage:\n<argv> <source file> < search file>\n");
return 0;
}
运行上面的代码就是这样:
searching for mary
in records.txt
jon mik mary 56 567
mary found in line 1
jon mik mary 56 56
searching for john
in records.txt
no match found
searching for kj
in records.txt
no match found
searching for mark in records.txt
no match found
答案 0 :(得分:0)
第一个问题是你没有从word
的末尾剥离空格,然后你还附加了一个空格,我不知道为什么。如果您在每次阅读新行时迭代word
,并将第一个\n
替换为\0
,则会进行最小的更改。
第二个问题是,您只是迭代第二个文件的内容,因此您只是将names.txt
中的字词与records.txt
中的第一行进行比较。
您还需要将flag
重置为0
。