【原创】C语言处理文件数据(1)
2014-10-30 14:01
369 查看
【原创】C语言处理文件数据(1)
今天帮同学处理一个有规律的文件数据。
第一种情况:
总共1600行,文件数据格式如下:0:281 1:687 2:309 3:29 4:101 5:871 6:26 7:5 8:0 9:0 0:1286 1:166 2:298 3:291 4:0 5:106 6:74 7:35 8:0 9:54 0:523 1:289 2:369 3:66 4:908 5:16 6:109 7:25 8:0 9:1 0:187 1:318 2:391 3:0 4:533 5:410 6:430 7:19 8:3 9:18 0:7 1:1225 2:856 3:0 4:0 5:174 6:0 7:48 8:0 9:0 0:826 1:876 2:182 3:5 4:5 5:0 6:393 7:24 8:0 9:0 0:603 1:906 2:288 3:73 4:90 5:326 6:13 7:12 8:0 9:0 0:109 1:775 2:528 3:60 4:626 5:0 6:193 7:18 8:0 9:0 0:261 1:1318 2:444 3:33 4:0 5:197 6:27 7:35 8:0 9:0 0:507 1:671 2:798 3:40 4:0 5:0 6:0 7:91 8:203 9:2 </span>
要求:将每组数据冒号和冒号之前的数据去掉。
处理完之后部分文件数据格式:
281 687 309 29 101 871 26 5 0 0 1286 166 298 291 0 106 74 35 0 54 523 289 369 66 908 16 109 25 0 1 187 318 391 0 533 410 430 19 3 18 7 1225 856 0 0 174 0 48 0 0 826 876 182 5 5 0 393 24 0 0 603 906 288 73 90 326 13 12 0 0 109 775 528 60 626 0 193 18 0 0 261 1318 444 33 0 197 27 35 0 0 507 671 798 40 0 0 0 91 203 2 </span>
编程方法,想到两种。
第一种方法:利用fgetc()和fputc().
方法原理:其实就是想办法只读取冒号和空格之间的数据,以及换行符,其他的数据跳过。每次读取一个字符数据,找到分号':',开始读取字符数据到目标文件,直到碰到空格,此时第一组数据读取完毕。当读到的字符数据为换行符'\n'时,向目标文件写一个换行符'\n'。
代码如下:
/************************************************************************* > File Name: datahandle1.c > Author: Geng > Mail: genglut@163.com > Created Time: Thu 30 Oct 2014 01:54:56 PM CST ************************************************************************/ #include<stdio.h> #include<stdlib.h> int main(void) { FILE *filesrc, *filedest; char ch; if((filesrc = fopen("data.txt", "r")) == NULL) { perror("fopen"); exit(EXIT_FAILURE); } if((filedest = fopen("getdata.txt", "w")) == NULL) { perror("fopen"); exit(EXIT_FAILURE); } while(!feof(filesrc))//判断文件是否结束 { if((ch = fgetc(filesrc)) == ':')//找分号 { while ((ch = fgetc(filesrc)) != ' ')//读取分号之后和空格之间的数据到目标文件 fputc(ch, filedest);//读取字符数据到目标文件 fputc(' ', filedest);//第一组数据读完后,加入两个空格 fputc(' ', filedest); } if(ch == '\n')//判断是否为行末尾,即是否读到了换行符,是则向目标文件写一个换行符进行换行 fputc('\n', filedest); } return 0; }
第二种方法:利用格式化输入输出函数fprintf()和fscanf().
方法原理:找到文件数据规律,数据组全为xx:xx格式,所以只需格式化读取源文件,然后格式化写入目标文件即可。此外,每行数据组格式均为10,所以,可以10为判断依据,向目标文件写入换行符。
代码如下:
/************************************************************************* > File Name: datahandle.c > Author: Geng > Mail: genglut@163.com > Created Time: Thu 30 Oct 2014 01:54:32 PM CST ************************************************************************/ #include<stdio.h> #include<stdlib.h> int main(void) { FILE *filesrc, *filedest; int word1, word2, temp; temp = 0; if((filesrc = fopen("data.txt", "r")) == NULL) { perror("fopen"); exit(EXIT_FAILURE); } if((filedest = fopen("getdata.txt", "w")) == NULL) { perror("fopen"); exit(EXIT_FAILURE); } while(!feof(filesrc))//判断文件是否结束 { if(temp == 10)//已经读完一行数据 { temp = 0; fprintf(filedest, "%s", "\n");//向目标文件写入换行符 } fscanf(filesrc, "%d:%d", &word1, &word2);//格式化读取源文件 fprintf(filedest, "%d ", word2);//格式化写入目标文件 temp++; } return 0; }
第二种情况:
总共800行,部分原数据格式:4 401:1 402:1 403:1 404:1 5 501:1 502:1 503:1 504:1 505:5 3 301:1 302:2 303:4 6 601:1 602:2 603:3 604:4 605:5 606:6
要求:将每组数据冒号和冒号之后的数据去掉,并且将每行首个数字去掉。
处理完之后部分文件数据格式:
401 402 403 404 501 502 503 504 505 301 302 303 601 602 603 604 605 606
编程方法,利用fgetc()和fputc().
方法原理:其实就是想办法只读取空格和冒号之间的数据,以及换行符,其他的数据跳过。每次读取一个字符数据,找到分号' ',开始读取字符数据到目标文件,直到碰到空格,此时第一组数据读取完毕。当读到的字符数据为换行符'\n'时,向目标文件写一个换行符'\n'。
示例代码:
/************************************************************************* > File Name: data.c > Author: Geng > Mail: genglut@163.com > Created Time: Sat 01 Nov 2014 04:12:12 PM CST ************************************************************************/ #include<stdio.h> #include<stdlib.h> int main(void) { FILE *filesrc, *filedest; char ch; if((filesrc = fopen("data.txt", "r")) == NULL) { perror("fopen"); exit(EXIT_FAILURE); } if((filedest = fopen("dataget.txt", "w")) == NULL) { perror("fopen"); exit(EXIT_FAILURE); } while(!feof(filesrc)) { if((ch = fgetc(filesrc)) == ' ')//找空格 { while ((ch = fgetc(filesrc)) != ':')//找冒号 { if(ch == '\n')//找换行符 { fputc('\n', filedest); break;//跳出当前的while循环 } else fputc(ch, filedest); } if(ch != '\n')//如果不是换行符,加上两个空格,就是为了把数据分开 { fputc(' ', filedest); fputc(' ', filedest); } } } return 0; }
原文链接:http://blog.csdn.net/geng823/article/details/40618471
相关文章推荐
- 【原创】C语言处理文件数据(2)
- 【原创】C语言处理文件数据(5) 分类: Linux --- C 2015-04-23 15:02 40人阅读 评论(0) 收藏
- 【原创】C语言处理文件数据(3) 分类: Linux --- C 2014-11-04 10:13 74人阅读 评论(0) 收藏
- 【原创】C语言处理文件数据(4) 分类: Linux --- C 2014-11-06 11:15 87人阅读 评论(0) 收藏
- 【原创】C语言处理文件数据(1)
- 【原创】C语言处理文件数据(4)
- 【原创】C语言处理文件数据(5)
- 【原创】C语言处理文件数据(2)
- 【原创】C语言处理文件数据(3)
- 巩固C语言(十一)----文件的数据处理
- C语言处理文件中数据
- (原创)datagrid数据导出到excel文件给客户端下载的几种方法
- Oracle7.X 回滚表空间数据文件误删除处理方法
- Oracle7.X 回滚表空间数据文件误删除处理方法
- ORACLE 回滚段表空间数据文件丢失或损坏处理方法(2)
- [原创]VB程序 - 处理字符和文件名称的代码模块
- (原创)datagrid数据导出到excel文件给客户端下载的几种方法
- Oracle系统紧急故障处理(数据文件、日志文件以及表空间损坏的处理)
- 用JAVA处理文本与二进制数据混合大文件
- ORACLE 回滚段表空间数据文件丢失或损坏处理方法(1)