繁体   English   中英

读取包含多行字符串,整数和浮点数的文件

[英]Reading a file containing multiple lines of strings, integers and floats

我正在尝试读取一个包含包含字符串,整数和浮点数的行的文件。 数据之间用逗号分隔,并且我已经看到了大量有关如何最好地解决此问题的信息。 我先尝试读入一行,然后再实现多行,从而简化了问题。

我已经设法读取了前两个数据。 浮动给了我很多问题。

这是我尝试阅读的示例:

CHANNEL_1,0,0.453

char        CHANNEL_NAME_[BUF_SIZE];
uint32_t    val1_;
double      val2_;
    FILE *fp;
int c;

    fp = fopen("E:\\read_from_file\\config.cfg", "r");

if (fp < 1)
{
    printf("Failed to open file = %d\n", fp);
    fclose(fp);
}

c = fscanf(fp, "%[^,], %u[^,], %lf", CHANNEL_NAME_, &val1_, &val2_);

printf("[%s] [%u] [%lf]\n", CHANNEL_NAME_, val1_, val2_);
printf("C = %d\n", c);

我能够正确打印字符串和整数,但是,浮点数给我带来了问题。 它以随机浮动的形式出现,例如34534524524523452345.0000000。 我希望看到上述浮动为0.453。

当我打印C时(这是fscanf的结果),由于读取了3种数据类型,我得到2个错误,因为我希望读取3个。

我究竟做错了什么?

没有诸如"%u[^,]"之类的说明符。 该格式被视为单独的"%u"然后是单独的"[^,]"

%[格式仅读取字符串,它没有任何类型前缀(并且不需要,因为scanf将停止在输入的第一个非数字字符处读取整数)。 这意味着您只能将"%u"用作中间说明符:

c = fscanf(fp, " %[^,], %u, %lf", CHANNEL_NAME_, &val1_, &val2_);

请注意,我在格式字符串中添加了一个前导空格。 这是因为"%["格式不会跳过前导空格(就像上一行之后的所有可能的换行一样)。


使用格式说明符"%u[^,]" ,该函数实际上尝试匹配输入中的精确序列"[^,]" ,但找不到该序列,从而导致无法读取最后一个值。 因此, c的值为2 (因为fscanf仅匹配两个值,即初始字符串和第一个无符号整数)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM