【问题标题】:Parsing a file in C (Lines)在 C 中解析文件(行)
【发布时间】:2016-02-15 03:10:16
【问题描述】:

我有一个如下所示的文件:

5
x=
6
y=

我想最初跳过第一行,解析第二行,然后回到第一行并 strcat 两个字符串。但是,我似乎无法正常工作。

例如:

我有:

while(fgets(buffer,sizeof(buffer),file) != NULL) {

     fgets(buffer,100,file); //skip first line

     char * tempVar = malloc(sizeof(char)*10);

     strcpy(tempVar,buffer); //copy second line into tempVar

     rewind(file); //go back to first line? doesnt work

     //then strcat the two strings, so I get x=5

}

请注意,我的文件中的行并不总是这么简单,这些只是我尝试测试的示例行(在行之间返回和第四行,提前阅读等)。

有什么想法吗?

【问题讨论】:

    标签: c string parsing pointers


    【解决方案1】:

    您可以使用int fseek ( FILE * stream, long int offset, int origin ); int origin可以在哪里

    SEEK_SET    Beginning of file
    SEEK_CUR    Current position of the file pointer
    SEEK_END    End of file *
    

    因此,如果您知道偏移量,就可以随意跳转。

    编辑:

    FILE* file = fopen(fileName, "r"); 
    char line[256];
    
    fgets(line, sizeof(line), file); //skip first
    fgets(line, sizeof(line), file);
    printf("%s", line);  //  prints x=
    fseek ( file , 0 , SEEK_SET );
    fgets(line, sizeof(line), file); 
    printf("%s", line);  // prints 5
    

    现在,如果您想循环,您需要将偏移量保存在某处 为了跳回他们身边。您可以使用 strlen() 在 在我的示例中使用缓冲区 (char line[256]) 并添加偏移量。

    【讨论】:

    • 我并不总是知道偏移量(即每行有多长)。尽管如此,你能否展示我将如何使用它的代码(在这种情况下),我的文件看起来完全一样(即调用函数的次数等)。
    • @EDET:您可能还需要ftell() 告诉您文件中适当位置的当前偏移量。阅读和记住第一行,然后阅读第二行,然后生成串联输出会容易得多。
    • 这个链接有一些关于文件定位功能的信息gnu.org/software/libc/manual/html_node/File-Positioning.html
    猜你喜欢
    • 2023-03-24
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多