【问题标题】:How to read from a file except the last line in C?如何从 C 中除最后一行之外的文件中读取?
【发布时间】:2010-08-05 09:21:20
【问题描述】:

我有一个文件,我需要在其中读取数据并将其存储到结构中。

10001 john
10002 david
10003 randy
10/10/2010 15:50:55 Updated by : Name

现在对于上面的文件,我需要从“10001”和“john”到“10003”和“randy”读取数据,除了最后一行(文件结尾)。

如何在 C 中做到这一点?

更新:最后一行将是动态的。

【问题讨论】:

  • 搜索谷歌并节省我们的时间。谢谢。
  • 这就是为什么你的最后一行可能是第一行。然后就没有问题了。
  • Guillaume:在这里,我认为 stackoverflow.com 是针对与编程相关的问题。我错了吗?

标签: c file struct readfile


【解决方案1】:

如果文件没有最后一行,你会怎么做?大概在某种循环中,读取每一行并保存它。

您可以在保存之前添加一个“if”,检查该行是否与您的“文件结尾”匹配。

一般来说,对于这类问题,请将问题分解为您可以理解的部分。然后将这些位组合在一起。

如果文件看起来像这样,您可能还想考虑应该做什么

10001 john
10002 david
Silly line in middle of file
10003 randy
End of the file
10003 mr unexepected

您的应用程序应该能够适应奇怪的输入。

【讨论】:

  • 还要考虑空行,尤其是在文件末尾。
【解决方案2】:
char line[81];
FILE *f=fopen("file","rt");

while( fgets(line,sizeof line,f) )
{
int tag1;
char tag2[81];
if( 2==sscanf(line,"%d%80s",&tag1,tag2) )
{
/* do anything */
}
}

【讨论】:

    【解决方案3】:

    逐行阅读。当你得到EOF 时丢弃最后一行。

    编辑:

    while (fgets(line, length, file) && !feof(file))
    {
       /* process the line */ 
    }
    

    【讨论】:

    • 你能帮我如何丢弃最后一行。
    • 我的话,这家伙有多懒?
    • while (fgets(line, length, file) && !feof(file)) { /* process the line */ }
    • 我并不懒惰。我只是c的初学者并且不知道它,这就是为什么问。我希望问我是否对这个概念不清楚。感谢您的回复,请不要对别人这么说。
    • @Guru 这与 C 无关,而是与一般编程有关。查看编辑。
    【解决方案4】:
    int id;
    char name[80];
    
    FILE *fp = fopen("data.txt", "r");
    
    while (fscanf(fp, "%d%s[^n]", &id, name) == 2)
    {
       /* do something with id and name */ 
    }
    

    您不需要先读取一行然后从中获取数据。相反,只需直接从文件中读取您需要的数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 1970-01-01
      相关资源
      最近更新 更多