我见过文件处理程序,其中一个程序使用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_ DATA3
行8 FC
之后的空格。如何在C中使用fseek做到这一点?
答案 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
用于二进制数据,如果您处理文本文件,则应使用fgets
或getline
(建议使用getline
)。
有一个关于“fgets()vs getline”的公开讨论,很多人说“fgets被弃用”只是一个gcc宣传,支持他们的特定getline()。
fgets()
中的一个可能缺陷是,如果有空字节被读取,它就不会告诉你任何事情,你可以使用getline()
来解决这个问题。
但是如果你不喜欢gcc,或者使用不同的东西,请使用fgets()
。如果您遇到gcc,请使用getline()
。