c文件操作简单应用——fscanf()
来源:互联网 发布:开淘宝网店不交保证金 编辑:程序博客网 时间:2024/05/21 01:58
前几天忙着写论文,关于无线传感器网络leach协议的。然后仿真成功后,出现了一些数据文件。里面的数据有一定的格式,但是又不足以直接用于数据分析。里面的数据大致是这样的(里面的“ .”是省略的意思,下同):
10 0 110 1 1. . .. . .10 99 120 0 1. . .. . .20 99 1. . .. . .607.90000000006967 99 0
数据中最左面的一列是时间参数,最右面的是节点当时的状态,0是死亡(能量耗尽),1是活着,中间的是对应的节点的ID,一共100个节点。这是原始数据,但是我想要时间参数和对应的此时间的活着的节点数据,也就是统计在某一时刻,最右面一列1的个数。原本想自己数一下,但是发现数据一下子有6000多行,不太可行。最终决定写个简单的程序,处理一下。用c语言,又涉及到c语言的文件操作,由于以前没怎么弄过,最终查了些资料,明白了c语言中下相关文件操作函数的用法。实现代码如下,最后完美解决。
#include <stdio.h>//#include <stdlib.h>int main(void){ FILE* fp; FILE *fp_res; int m=0; int n=0; double a=0.0; int b=0; int c=0; int sum=0; fp = fopen("leach.alive","r"); if(!fp) { perror("fopen"); } fp_res = fopen("alive.out","wt"); fseek(fp,0,SEEK_SET); for(m=10;m<=610;m+=10) { for(n=0;n<100;n++) { fscanf(fp,"%lf %d %d %*[\n]",&a,&b,&c); if(c == 1)sum = sum+1; printf("%.14f\t%d\t%d\n",a,b,c); } fprintf(fp_res,"%.14f %d\n",a,sum*2); a=0.0;b = 0; c=0; sum = 0; } fclose(fp); fclose(fp_res); return 0;}
用到fscanf()和fsprintf()函数。它们的详细说明百度百科上有,可以查。接下来还有一个文件涉及小数位数很长的浮点数。以前没有处理写程序,没有处理过那么小的小数。
原始数据格式如下:
10 0 0.021071690871238564. . .. . .10 99 0.02365075153703858520 0 0.042791842364373486. . .. . .20 99 0.048625785045803928. . .. . .607.90000000006967 99 2.0022387625400144
文件中第一列数据 和 最后一列数据都是浮点数,而且小数位数达到18位。这一次要统计对应的时间内,右面一列数值的总和。还是用fscanf()和fsprintf()函数:
#include <stdio.h>int main(void){ FILE* fp; FILE *fp_total; FILE *fp_ave; char str[11]; double a; int b; double c=0.0; int n=0; int m=0; int i=0; double sum=0.0; double ave=0.0; fp=fopen("aa","r"); if(!fp); { // printf("open error\n"); perror("fopen"); // return 1; } fp_total = fopen("total.out","wt");//打开建立一个文件 fp_ave = fopen("ave.out","wt"); fseek(fp,0,SEEK_SET); for(m=10;m<=610;m+=10) { for(n=0;n<100;n++) { fscanf(fp,"%lf %d %lf %*[\n]",&a,&b,&c); sum = sum+c; printf("%.14f\t%.18f\n",a,c); } ave = sum/100; fprintf(fp_total,"%.14f %.18f\n",a,sum); fprintf(fp_ave,"%.14f %.18f\n",a,ave); a=0.0; b=0; c=0.0; sum=0.0; ave=0.0; } fclose(fp); fclose(fp_total); fclose(fp_ave); return 0; }处理后的数据只剩下两列,在文件中:
10.00000000000000 2.42116334494435259120.00000000000000 4.87638702135000912130.00000000000000 6.99027025896306941640.00000000000000 9.12871690518989353850.00000000000000 10.75010862203723327560.00000000000000 12.33497991089849499270.00000000000000 14.780006246064035125接下来就是利用linux下的画图软件(gnuplot)来画图了。很有意思的小应用。写在此,权当笔记了。
- c文件操作简单应用——fscanf()
- C/C++文件操作fopen/fscanf/ fprintf/ fclose简单使用方法
- C语言文件操作----fscanf
- C语言之文件读写——fscanf(),fprintf()详解
- 15:文件操作(C标准库函数)fopen/fclose/fread/fwrite/fseek/fprintf/fscanf
- 文件操作函数 C (fputc fgetc fputs fgets fscanf fprintf)
- C文件操作函数fscanf和fprintf的使用
- C语言几个文件操作函数fopen(),fseek(),fscanf(),fwrite()
- C文件操作之--从文件中读取前两行数据(fscanf, char[]转string)
- 文件操作——fread,fwrite,fscanf和fprintf函数详解
- 文件操作函数 C语言 (FILE fputc fgetc fputs fgets fscanf fprintf)
- 文件操作函数 C语言 (FILE fputc fgetc fputs fgets fscanf fprintf)
- 文件操作以及fprintf()、fscanf()、fgets()、fputs()
- 简单的几个文件操作(C)
- IO(C#) 读写文件简单操作
- fscanf.c
- C++—文件操作
- C—文件操作
- 正则表达式笔记 4 分支条件 逻辑操作符 |
- python用urllib2处理超时的经历
- linux嵌入式系统开发之触摸屏---驱动篇(下/源码分析) .
- 2012年JavaEE+Android培训视频教程
- android Vibrator震动效果
- c文件操作简单应用——fscanf()
- Java SE(二)
- C++随机数产生
- ARM-Linux驱动-触摸屏驱动分析 .
- android listview仿iphone特效
- ASP 简单的登录界面 9-18
- 【hdoj】题目分类
- 最长公共子序列空间优化算法
- 面向切面编程