【问题标题】:How can I read specific data columns from a file in c如何从c中的文件中读取特定的数据列
【发布时间】:2010-07-28 10:32:46
【问题描述】:

大家好,

我是c编程的初学者。我遇到了这个问题,并且在这方面花费了相当多的时间,但没有任何重大进展。

我的问题是这样陈述的:

我有一系列扩展名为 (.msr) 的文件,它们包含十多个参数的测量数值,这些参数的范围从日期、时间、温度、压力......,用分号分隔。 数据值示例如下所示。

2010-03-03 15:55:06; 8.01; 24.9; 14.52; 0.09; 84; 12.47;
2010-03-03 15:55:10; 31.81; 24.9; 14.51; 0.08; 82; 12.40;
2010-03-03 15:55:14; 45.19; 24.9; 14.52; 0.08; 86; 12.32;
2010-03-03 15:55:17; 63.09; 24.9; 14.51; 0.07; 84; 12.24;

每个文件的名称为 REG_2010-03-03、REG_2010-03-04、REG_2010-03-05...,它们都包含在一个文件中。

  1. 我想从每个文件中提取日期信息,在本例中为 2010-03-03,第 3 列和第 6 列。

  2. 求第 3 列和第 6 列各列的统计平均值。

  3. 然后将结果存储在一个新文件中,该文件将仅包含日期和上述列的计算平均值以供进一步分析。

它们将用 c 编写。

我真的在指望或你的帮助才能继续这件事。

问候

【问题讨论】:

  • 到目前为止你写了哪些 C 代码?

标签: c data-processing


【解决方案1】:

这是一个起点:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    char str[] = "2010-03-03 15:55:06; 8.01; 24.9; 14.52; 0.09; 84; 12.47;";
    char *date, *tmp;
    double mean = 0;
    int i;

    date = strtok(str, " ");
    strtok(NULL, " "); // skip over time
    while (tmp = strtok(NULL, ";")) {
        ++i;
        if (i == 3 || i == 6) { // get only the 3rd and 6th value
            mean += strtod(tmp, NULL);
        }
    }
    mean /= 2;

    printf("%s: %.2f\n", date, mean);

    return 0;
}

你只需要对每一行做类似的事情。

【讨论】:

  • scanf 已经可以进行这种解析了。 "%10s %10[^;];%f;%f;%f;%f;%f;%f;" 是匹配 OP 描述的格式字符串。
  • 非常感谢这真的让我滚动
【解决方案2】:

sscanf 可以作为起点。 首先,您必须将每一行读入一个字符串并使用 sscanf 获取所需的参数,这些参数在该字符串中由空格分隔。

/* sscanf example */
#include <stdio.h>

int main ()
{
  char sentence []="Rudolph is 12 years old";
  char str [20];
  int i;

  sscanf (sentence,"%s %*s %d",str,&i);
  printf ("%s -> %d\n",str,i);

  return 0;
}

输出

Rudolph -> 12

可能有更好、更简单的方法来做到这一点,我相信 SO 会在这里回答。

编辑:

当然,您也可以使用strtokstrtok_r(strtok 的可重入版本)解析每个字符串。 检查链接中的示例以了解想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-24
    • 2020-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多