如何使用fseek将位置指针移动到文件中的下一行

时间:2018-05-05 18:27:34

标签: c file

我见过文件处理程序,其中一个程序使用fseek,如下所示:

/* This example opens a file myfile.dat for reading.
   After performing input operations (not shown), it moves the file
   pointer to the beginning of the file.
*/

#include <stdio.h>

int main(void)
{
   FILE *stream;
   int result;

   if (stream = fopen("myfile.dat", "r"))
   { /* successful */

   if (fseek(stream, 0L, SEEK_SET));  /* moves pointer to   */
                                  /* the beginning of the file */
   { /* if not equal to 0
             then error ...    */
   }
   else {
       /* fseek() successful  */
   }
}

像这样可以将文件指针移动到该行

之后的下一行

BO_ 377 FC_DM_MISC: 8 FC SG_ DATA3 m11 : 31|8@0+ (1,0) [0|0] "" DM

这两行是我想编程的方式,当一个人识别数字377时,指针现在应该转到下一行,即尽管是白色的SG_ DATA38 FC之后的空格。如何在C中使用fseek做到这一点?

2 个答案:

答案 0 :(得分:1)

试试这段代码。它可以帮到你。这里输入文件的每一行都转换为 string ,因为与复杂的fseek()函数相比,字符串操作非常简单。这可能不是完美的答案,但这将是非常简单的解决方案。

#include <stdio.h>
#include <string.h>

int main(void)
{
    FILE *stream;
    int result;

    char tmp[100]; // assuming that max length of a line in myfile.dat is 100.

    if (stream = fopen("myfile.dat", "r"))
    { /* successful */
        fscanf(stream, "%100[^\n]", tmp); // assuming that max length of a line in myfile.dat is 100.
        printf("%s", tmp);
        if (strstr(tmp, "377"))
        { // check for 337

            fscanf(stream, "%100[^\n]", tmp); // next line is in the string tmp .

            // continue your program.
            //printf("%s", tmp);
        }
    }
}

答案 1 :(得分:-1)

fseek用于二进制数据,如果您处理文本文件,则应使用fgetsgetline(建议使用getline)。

有一个关于“fgets()vs getline”的公开讨论,很多人说“fgets被弃用”只是一个gcc宣传,支持他们的特定getline()。

fgets()中的一个可能缺陷是,如果有空字节被读取,它就不会告诉你任何事情,你可以使用getline()来解决这个问题。

但是如果你不喜欢gcc,或者使用不同的东西,请使用fgets()。如果您遇到gcc,请使用getline()