读取文件的最后N行 问题思路来自 http://www.cnblogs.com/cobbliu/archive/2012/03/10/2388802.html
2012-05-24 12:35
357 查看
思路两个:
(1)快慢指针,和找链表倒数第K个节点有点类似。同样适用两个文件指针,fp,fs,把快的文件指针先读N行后,快慢文件指针同时一行一行的开始读取,直到快的文件指针读到文件最后,则慢的文件指针此时读到文件的倒数第N行,就可以开始数数慢的文件指针的内容直到读取文件结束。
(2)利用循环链表,长度为n,节点的data为char型数组,用来保存一行的内容
思路,打开文件,读取一行,拷贝到循环链表当前指针所指的节点中,然后把链表指针后移,重复读取,拷贝,结束后,链表中保存了N个,就是最后的
算法:
(1)快慢指针,和找链表倒数第K个节点有点类似。同样适用两个文件指针,fp,fs,把快的文件指针先读N行后,快慢文件指针同时一行一行的开始读取,直到快的文件指针读到文件最后,则慢的文件指针此时读到文件的倒数第N行,就可以开始数数慢的文件指针的内容直到读取文件结束。
void PrintfFileN(string filename,int n){ File* fp,*fs; int i; char fpline[MAXLINE]; char fsline[MAXLINE]; if((fp = fopen(filename,"r")) == NULL) { fprintf(stderr,"Cannot open file:%s/n",filename); exit(-1); } if((fs = fopen(filename,"r")) == NULL) { fprintf(stderr,"Cannot open file:%s/n",filename); exit(-1); } for(i = 1;i <= n; i++) fgets(fpline,MAXLEN,fp); //先将fp移动n个位置 while(fgets(fpline,MAXLEN,fp) != NULL) fgets(fsline,MAXLEN,fs); //将fp与fq一起向尾部移动,直到fp指向末尾 //此时fq指向倒数第n行 while(fgets(fsline,MAXLEN,fs) != NULL) printf("%s",fsline); //输出从fq开始的每一行 }
(2)利用循环链表,长度为n,节点的data为char型数组,用来保存一行的内容
思路,打开文件,读取一行,拷贝到循环链表当前指针所指的节点中,然后把链表指针后移,重复读取,拷贝,结束后,链表中保存了N个,就是最后的
算法:
typedef struct Node{ char Data[MAXLINE]; struct Node * next; }Node; void PrintfFileN(string filename,int N){ Node* list=NULL,*p=NULL,*temp; char fileData[MAXLINE]; File* pFile; int i=0; while(i<N){//建个一个头结点是list的长度为N的链表 if(list==NULL){ list=p=(Node*)malloc(sizeof(Node)); list->Data[0]='\0'; list->next=NULL; i++; }else{ temp= (Node*)malloc(sizeof(Node)); temp->data[0]='\0'; temp->next=NULL; p->next=temp; p=temp; i++; } } p->next=list;//循环链表 p=list; pFile=fopen(filename,"r"); while(gets(fileData,MAXLINE,pFile)!=NULL){ strcpy(p->Data,fileData); p=p->next; } for(i=0;i<N;i++){ temp=p->next; printf("%s",p->data); free(p); p=temp; } }
相关文章推荐
- WindowsPhone问题笔记-- 正确选择build action 解决媒体资源无法读取问题 转:http://www.cnblogs.com/qinxg/archive/2012/07/17/2594503.html
- [转-来自啊泰]推模式下dataset1下显示的是"...未找到项目..." 问题的解决[补充] [http://www.cnblogs.com/babyt/archive/2005/04/15/138588.html]
- [转-来自啊泰]推模式下dataset1下显示的是"...未找到项目..." 问题的解决 [http://www.cnblogs.com/babyt/archive/2005/04/15/138582.html]
- js读取文件(转:http://www.cnblogs.com/huifeidejian/archive/2010/08/09/1795680.html)
- 非阻塞Connect对于select时应注意问题 http://www.cnblogs.com/zhangmo/archive/2013/04/02/2995824.html
- 按回车提交问题: http://www.cnblogs.com/hfyb/archive/2007/01/21/626135.html
- IIS 中 "另一个程序正在使用此文件,进程无法访问!" http://www.cnblogs.com/publicbill/archive/2007/05/29/763844.html
- 在asp.net中读取XML文件信息的4种方法 (http://www.cnblogs.com/liping19851014/archive/2007/10/16/926137.html)
- Delphi 文件操作 http://www.cnblogs.com/nothing_cj/archive/2010/09/03/1817256.html
- http://www.cnblogs.com/hellojava/archive/2012/12/28/2835730.html web.xml文件详解
- ArcGIS 9.3中的一些新功能 来自http://www.cnblogs.com/luspa/archive/2009/09/17/1568814.html
- ajax异步上传带文件的表单 http://www.cnblogs.com/gaojun/archive/2012/08/11/2633891.html
- Android中gravity与layout_gravity的区别 http://www.cnblogs.com/linjiqin/archive/2011/02/20/1959239.html
- 通用权限的思路(转自:http://www.cnblogs.com/jyk/archive/2008/11/04/1178753.html)
- C#写文件常用的五种方法(转自:http://www.cnblogs.com/kiddo/archive/2008/03/17/1110061.html)
- Android P2P语音通话实现(思路探讨)【转】http://www.cnblogs.com/milospooner/archive/2012/07/13/2590950.html
- [转-来自啊泰]可逆加密,支持中文,支持密钥,加密后的密文每次都不同,且可随意改变算法 组件之Vb.Net版本 [http://www.cnblogs.com/babyt/archive/2005/04/13/136613.html]
- Linux编程学习笔记--proc文件系统 http://www.cnblogs.com/weichsel/archive/2012/06/23/2559613.html
- C#读Excel文件并插入到数据库中(转自:http://www.cnblogs.com/michaelxu/archive/2009/03/12/1409761.html)
- 如果你的数据库文件只剩下数据文件没有日志文件时,如何附加 (摘自:http://www.cnblogs.com/yukaizhao/archive/2008/07/23/sp_attach_single_file_db.html)