在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和更多)。
非常感谢你们...
答案 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
用作字符。
如果有人知道另一种最简单的解决方案。请回答 :) 很快我将发布代码,对其进行处理:)