美好的一天,
我是c编程的初学者。我遇到了这个问题,并且已经花了相当多的时间在它上面而没有任何可观的进展。
我的问题是这样说的:
我有一系列扩展名为(.msr)的文件,它们包含超过10个参数的测量数值,这些参数的范围从日期,时间,温度,压力......,用半冒号分隔。 数据值的示例如下所示。
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,......它们都包含在一个文件中。
我想从每个文件中提取日期信息,在本例中为2010-03-03,第3栏和第6列。
找出每个3和6列的统计平均值。
然后将结果存储在一个新文件中,该文件仅包含日期和上面列的计算平均值以供进一步分析。
他们将用c。
写成我真的在计算或帮助你实现这个目标。
此致
答案 0 :(得分:2)
这是一个起点:
#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;
}
你必须为每一行做类似的事情。
答案 1 :(得分:0)
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
可能会有更好更简单的方法来做到这一点,我相信在这里可以回答。
编辑:
当然,你也可以使用strtok或strtok_r(strtok的可重入版本)解析每个字符串。 查看链接中的示例以获得一个想法。