繁体   English   中英

读取C中特定格式的文本文件

[英]Reading text files with specific format in C

我一直在尝试阅读包含 C 中具有特定格式的书籍数据库的文本文件。 这是我到目前为止所拥有的:

#include "database_main.h"

struct Book getDetailsFromFile(FILE *ptr)
{
    struct Book bookVar;    /*new book variable as struct*/
    char title[MAX_TITLE_LENGTH+1], author[MAX_AUTHOR_LENGTH+1];   /*temp variables to input data*/
    int year;

    fscanf(ptr, "Title: %100[0-9a-zA-Z ]\n", title);    /*fscanf collecting up to 100 character of only numbers or letters*/
    fprintf(stderr, "%s\n", title);

    fscanf(ptr, "Author: %100[0-9a-zA-Z ]\n", author);
    fprintf(stderr, "%s\n", author);

    fscanf(ptr, "Year: %i\n\n", &year);
    fprintf(stderr, "%i\n", year);

    strcpy(bookVar.title, title);   /*transfering values to stuct*/
    strcpy(bookVar.author, author);
    bookVar.year = year;
    bookVar.right = NULL;
    bookVar.left = NULL;
    return bookVar;
}

/* read file containing database of books */
void read_book_database ( char *file_name )
{
    FILE *fptr;   /*file pointer*/
    if ((fptr = fopen(file_name, "r")) == NULL) {
        fprintf(stderr, "Error! opening file\n");   /*catch error*/
    }
    else
    {
        while (feof(fptr) == 0) /*do until end of file*/
        {
            addBook(getDetailsFromFile(fptr));   /*adds book to database from the file*/
            fprintf(stderr, "Got Book\n");
        } 
        fprintf(stderr, "closing file\n");
        fclose(fptr);
    }
}

当代码运行时,它会不断重复“Got Book” ,而不会打印这本书的任何细节。

我也尝试过使用fgets() ,它确实输入了数据,但似乎将年份字段分离到数据库中的一本全新书籍中,没有其他信息。 这不是addBook()的问题,因为它已经过手动输入测试并且可以正常工作。

其次fgets()不会删除 Title: 以及文件每行开头的此类字段。 我尝试了其他一些在线解决方案,但都没有奏效。

谢谢你提供的所有帮助。

另请注意,这是使用 ANSI 标准编译的。

所以 while(feof(fptr)==0) 原来是问题所在,我现在将整个内容更新为以下内容:

void read_book_database ( char *file_name )
{
    char c[1000];
    FILE *fptr;
    if ((fptr = fopen(file_name, "r")) == NULL) {
        fprintf(stderr, "Error! opening file\n");
    }
    else
    {
        struct Book newBook;
        for(newBook;fscanf(fptr, "Title: %100[0-9a-zA-Z ,]\nAuthor: %100[0-9a-zA-Z ,]\nYear: %i\n\n", &(newBook.title), &(newBook.author), &(newBook.year))==3;)
        {
            fprintf(stderr, "Title: %s\nAuthor: %s\nYear: %i\n\n", newBook.title, newBook.author, newBook.year);
            addBook(newBook);
            /*addBook(getDetailsFromFile(fptr));*/
            fprintf(stderr, "Got Book\n");
        } 
        fprintf(stderr, "closing file\n");
        fclose(fptr);
    }
}

它现在确实会在程序的不同点引起一些问题,但我认为这与文本文件的读取无关,所以我相信这个特定问题已得到解决。 感谢大家的帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM