使用sscanf读取由|分隔的数据

时间:2015-10-05 16:09:24

标签: c file scanf

我必须从.txt文件中读取数据,这是数据样本:

1 |    SMAX 0.3848 | 0.234 | 0.15

我只对阅读第一,第三和第四列感兴趣(所以我想丢弃那个奇怪的SMAX 0.3848)。到目前为止,我有这个:

while(fgets(buffer, BUFFER_SIZE, fp) != NULL)
{
    sscanf(buffer, "%d | %*s | %lf | %lf", &id, &ra, &dec);
}

然而它不起作用,我认为是因为" SMAX 0.3848",我错误地丢弃了它。我的问题是,我怎么能读到这些数据?

注意:我的数据集中有很多列,还有其他的#34;奇怪的数据"我需要丢弃。

最好的问候。

3 个答案:

答案 0 :(得分:2)

问题是"%*s"它在找到空格时停止扫描,试试这个 1

if (sscanf(buffer, "%d |%*[^|]|%lf |%lf", &id, &ra, &dec) == 3)
    /* proceed to use `id', `ra', `dec' */
else
    /* invalid line of input */

要了解"%*[^|]"的含义/读取scanf(3)的手册页。

1 使用有意义的变量名称,今天的文本编辑器它没有额外的工作,因为自动完成功能将帮助你很多,有意义的变量名称将使程序容易了解几个月/周后你因某些原因(维护,重复使用)回到它时。

答案 1 :(得分:2)

而是像这样写 -

"%s"

答案 2 :(得分:0)

阅读LOGGER.info("printing lalala"); (或其任何变体)将停止在空格处阅读。