使用 sscanf 读取由 | 分隔的数据
Using sscanf for reading data separated by |
我必须从 .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",我错误地丢弃了它。我的问题是,我该如何读取这些数据?
注意:我的数据集中有很多列,还有其他 "weird data" 我需要丢弃。
此致。
问题是 "%*s"
它在发现白色 space 时停止扫描,试试这个1
if (sscanf(buffer, "%d |%*[^|]|%lf |%lf", &id, &ra, &dec) == 3)
/* proceed to use `id', `ra', `dec' */
else
/* invalid line of input */
要了解 "%*[^|]"
means/does 的内容,请阅读 scanf(3)
的手册页。
1使用有意义的变量名,使用今天的文本编辑器,自动完成功能将帮助您很多,有意义的变量名将使程序易于理解一些 months/weeks 稍后当您出于某种原因(维护、重用)返回它时。
而是这样写-
if(sscanf(buffer, "%d | %*[^%|] | %lf | %lf", &id, &ra, &dec)==3){
/* ^ this will read until | is not encountered and then discard it*/
// do something
}
阅读 "%s"
(或其任何变体)将在 space 处停止阅读。
我必须从 .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",我错误地丢弃了它。我的问题是,我该如何读取这些数据?
注意:我的数据集中有很多列,还有其他 "weird data" 我需要丢弃。
此致。
问题是 "%*s"
它在发现白色 space 时停止扫描,试试这个1
if (sscanf(buffer, "%d |%*[^|]|%lf |%lf", &id, &ra, &dec) == 3)
/* proceed to use `id', `ra', `dec' */
else
/* invalid line of input */
要了解 "%*[^|]"
means/does 的内容,请阅读 scanf(3)
的手册页。
1使用有意义的变量名,使用今天的文本编辑器,自动完成功能将帮助您很多,有意义的变量名将使程序易于理解一些 months/weeks 稍后当您出于某种原因(维护、重用)返回它时。
而是这样写-
if(sscanf(buffer, "%d | %*[^%|] | %lf | %lf", &id, &ra, &dec)==3){
/* ^ this will read until | is not encountered and then discard it*/
// do something
}
阅读 "%s"
(或其任何变体)将在 space 处停止阅读。