如何从c语言中的文件中读取特定的数据列
大家好 我是c编程的初学者。我有这个问题,花了相当多的时间在上面,但没有取得任何进展 我的问题是这样说的: 我有一系列扩展名为(.msr)的文件,它们包含十多个参数的测量数值,范围从日期、时间、温度、压力等等。。。。用分号分隔的。 数据值的示例如下所示如何从c语言中的文件中读取特定的数据列,c,data-processing,C,Data Processing,大家好 我是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-
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,。。。它们都包含在一个文件中
/* 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;
}
也许有更好、更简单的方法可以做到这一点,我相信届时会有答案
编辑:
当然,您也可以使用or(strtok的可重入版本)解析每个字符串。
查看链接中的示例以获得想法。这里是一个起点:
#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;
}
#包括
#包括
#包括
int main(int argc,字符**argv)
{
charstr[]=“2010-03-0315:55:06;8.01;24.9;14.52;0.09;84;12.47;”;
字符*日期,*tmp;
双平均值=0;
int i;
日期=strtok(str,“”);
strtok(NULL,“”;//随时间跳过
while(tmp=strtok(NULL,“;”)){
++一,;
如果(i==3 | | i==6){//只获取第三个和第六个值
平均值+=strtod(tmp,零);
}
}
平均值/=2;
printf(“%s:%.2f\n”,日期,平均值);
返回0;
}
您只需对每一行执行类似的操作。到目前为止您编写了哪些C代码?scanf已经可以进行这种解析了<代码>%10s%10[^;];%f;%f;%f;%f;%f;“是一个与OPs描述相匹配的格式字符串。非常感谢,这真的让我兴奋不已
#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;
}