如何使用fgets查找.csv文件中是否存在此行? (C)

时间:2017-11-06 22:52:57

标签: c csv

您好我想在C程序中使用fgets来查看.csv文件中的某个名称是否存在。如果是,则将其保存在数组中然后返回它。现在,它保存了.csv文件中的所有内容,我不确定原因。

C档案:

void FindRecord(char *filename, char *name, char record[]) {

    char *temp = record; //temp save record

    FILE *q = fopen(filename, "r"); //check that ths inputed .csv file exists
    if (q == NULL ) { //if it doesn't, then print error message and exit
        printf("This .csv does not exist");
        exit(1); //terminate with error message
    }

    while(!feof(q)) { //while I'm not at the end of the file
        fgets(temp, 1000, q); //Reads a line @ a time
        for (int i = 0; i < 1000; i++) {
            if(temp[i] == *name) {
                record[i] = temp[i];
                name++;
            }
        }
        printf("%s", record);
    }
    fclose(q);   
}

.csv文件:

Kevin, 123-456-7890
Sally, 213-435-6479
Megan, 415-336-8790

现在我运行程序时发生的是它返回3行。我希望iso如果*name指向名称"Kevin"并且它带有临时值,那么它就会返回:Kevin, 123-456-7890

1 个答案:

答案 0 :(得分:2)

  

现在我运行程序时发生的是它返回3行。

我不明白这是怎么回事。您只有一个数组可以返回结果。我可以相信你的代码打印所有三行,但它只会返回

  

我希望iso如果*name指向名称"Kevin"并且它附带temp,那么它就会返回:Kevin, 123-456-7890

嗯,你的代码在这方面有几个问题。其中最重要的是:

  • 虽然它执行了一些逐字符比较,但它没有任何代码可以拒绝无法匹配的行。

  • 它将temp设置为指向与record相同的数组,然后将每行读入该数组。即使没有找到匹配项,也会覆盖该数组,如果在最后一行读取的行上找到匹配,则实际匹配将丢失。

  • 它在尝试匹配时修改name指针,在部分匹配的情况下没有重置它的机制。

  • 当尝试匹配名称时,它会快速扫描输入行中的,分隔符,如果它们出现,则会在名称和输入字符串中显示字符串终止符。

  • while (!feof(file)) is always wrong