在c中搜索文件中的字符串到另一个文件

时间:2013-07-08 21:21:49

标签: c

我有一个文本文件(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

1 个答案:

答案 0 :(得分:0)

第一个问题是你没有从word的末尾剥离空格,然后你还附加了一个空格,我不知道为什么。如果您在每次阅读新行时迭代word,并将第一个\n替换为\0,则会进行最小的更改。

第二个问题是,您只是迭代第二个文件的内容,因此您只是将names.txt中的字词与records.txt中的第一行进行比较。

您还需要将flag重置为0