我必须从一个.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”,我错误地丢弃了它。我的问题是,我怎样才能读取这些数据?
注意:我的数据集中有很多列,还有一些“奇怪的数据”需要丢弃。
谨致问候。

最佳答案

问题是当它发现一个空白时它停止扫描,试试这个1

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

要了解"%*s"的含义/请阅读"%*[^|]"的手册页。
1使用有意义的变量名,使用今天的文本编辑器,这是没有额外的工作,因为自动完成功能将帮助你很多,有意义的变量名将使程序很容易理解几个月/几个星期后,当你回到它的原因(维护,重用)。

关于c - 使用sscanf读取由|分隔的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32953018/

10-12 15:01
查看更多