在C中读取文件未知格式

时间:2019-02-16 14:18:58

标签: c

C language中,我需要有关此练习的帮助。

我想知道如何从我不知道其格式的文件中读取数据。

-该文件将包含int(1-999)和char:“ OL” =已重载,“ ND” = noData,“ LB” = lowBattery。< / p>

示例:

  

My_file.txt

可以这样制作:

25
764
OL
ND
34
LB
624
235
ND
........

或者这样:

534 ND 356 LB LB 234 765 123 ND ND......
235 976 LB 156 ND......

我知道这:

   FILE *f;
    char str1;
    f=fopen(filename,"r");
    str1=fgetc(f); 
    while(str1 != EOF)
    {
        printf("%c",str1);
        str1=fgetc(f);
    }
   fclose(f);

可以读取文件,直到EOF。但是我不能使用它,因为我需要将这些值分配给一些int或chars ...(如果我使用enum会怎样?)

我确定我不能使用fscanf。但是真正的问题是:我如何读取文件,以及如何将这些值分配给struct或其他东西。 这样我就可以将它们用于运算(例如sum和更多)。

非常感谢你们...

2 个答案:

答案 0 :(得分:0)

  

我不知道它的格式

嗯..在我看来,您确切地知道格式:

  

文件将包含int(1-999)和char:“ OL” =重载,“ ND” = noData,“ LB” = lowBattery

您的文件包含由空格分隔的令牌序列,每个令牌都是OL,ND,LB或指定范围内的整数。

因此要解析该文件,一次只能读取一个字符。空格?忽略并继续下一个。一个数字?现在应该再增加2位数字。读取它们并转换为整数。 'O''N''L'?寻找下一个正确的字符。还有其他吗解析错误!

要保存每个令牌,请创建如下结构:

struct Token
{
  enum
  {   TokenOverLoad
    , TokenNoData
    , TokenLowBattery
    , TokenData
  } kind;
  short data; // only if kind == TokenData
};

然后在解析过程中将它们存储在列表或动态数组中。然后,您可以遍历该列表/数组以实现所有必需的功能,例如sum ...

答案 1 :(得分:0)

我问一个朋友。他说我可以使用fscanf

我只需要用字符定义struct

我将使用fscanf阅读%s并将它们添加到char char_name[20];

如果需要,我可以将atoi/atof用作数字或将strcmp用作字符。

如果有人知道另一种最简单的解决方案。请回答 :) 很快我将发布代码,对其进行处理:)