Linux读取一行文本的方法
2012-07-06 12:42
295 查看
第一种方法:
1.网上流行的一个方法: 打印出每行的文本信息。
2.我自己稍作修改,取得指定行数的文本信息。
执行以下,结果如图:
![](http://my.csdn.net/uploads/201207/06/1341549691_1891.JPG)
在此处做一个小小的拓展,就是在每行的文本信息中提取我们想要的信息:
执行结果,如下所示:
![](http://my.csdn.net/uploads/201207/06/1341560573_2724.JPG)
第二种方法:
有点长,但是也算一种办法啦。
1.网上流行的一个方法: 打印出每行的文本信息。
#include <stdio.h> #include <stdlib.h> int main(void) { FILE * fp; char * line = NULL; size_t len = 0; ssize_t read; fp = fopen("test.txt", "r"); if (fp == NULL) exit(EXIT_FAILURE); while ((read = getline(&line, &len, fp)) != -1) { printf("Retrieved line of length %zu :\n", read); printf("%s", line); } if (line) free(line); exit(EXIT_SUCCESS); }
2.我自己稍作修改,取得指定行数的文本信息。
#include <stdio.h> #include <stdlib.h> int get_file_line(char *pInputName, char *pOutputBuf, int cnt) { FILE * fp; int i=0; char * line = NULL; size_t len = 0; ssize_t read; fp = fopen(pInputName, "r"); if (fp == NULL) return -1; if(cnt<=0) return -2; while ((read = getline(&line, &len, fp)) != -1) { ++i; if(i>=cnt) break; } if (line) { memcpy(pOutputBuf,line,strlen(line)); free(line); return 0; } return -3; } int main(void) { char name[20]="test.txt"; char buf[256]={0}; int j; for(j=1;j<8;++j) { memset(buf,0,256); get_file_line(name,buf,j); printf("[%d] == %s",j,buf); } printf("\n"); }
执行以下,结果如图:
在此处做一个小小的拓展,就是在每行的文本信息中提取我们想要的信息:
#define dIndexName "WWW" #define NAME_LEN_MAX 7 void GetName(void) { int i; char *p=NULL; char line[30]={0}; char dest_name[20]={0}; char pFileName[256]="test.txt"; get_file_line(pFileName,line,1); printf("line === %s \n",line); if((p=strstr(line,dIndexName))&&(p=strchr(line,':'))) { memcpy(dest_name,p+1,NAME_LEN_MAX); } for(i=0;i<NAME_LEN_MAX;++i) { printf("[%d] === %c \n",i,dest_name[i]); } }
执行结果,如下所示:
第二种方法:
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> typedef unsigned char u8; int get_file_line(char *pInputName, int line) { char pTempString[256]; u8 *pTempBuffer; int tTempFile,tTempFileLen; int i,m,n; u8 tTempFlag,tTempCmdFlag; { tTempFile=open(pInputName,O_RDONLY); if(tTempFile>=0) { tTempFileLen=lseek(tTempFile,0,SEEK_END); lseek(tTempFile,0,SEEK_SET); tTempCmdFlag=1; if( NULL!=(pTempBuffer=(u8 *)malloc(tTempFileLen)) ) { if( tTempFileLen==read(tTempFile,pTempBuffer,tTempFileLen) ) { m=n=0; tTempFlag=0; while(n<tTempFileLen) { if( tTempFlag ) { if( pTempBuffer <0x20) { if( tTempFlag ) { if( n>m ) { memcpy(pTempString,pTempBuffer+m,n-m); pTempString[n-m]=0; printf("String1 %s \n",pTempString); } tTempFlag=0; } } }else if( pTempBuffer >=0x20 ) { m=n; tTempFlag=1; } n++; } if( (n>m)&&(tTempFlag) ) { memcpy(pTempString,pTempBuffer+m,n-m); pTempString[n-m]=0; printf("String2 %s \n",pTempString); } tTempCmdFlag=0; } free(pTempBuffer); } close(tTempFile); return tTempCmdFlag; } } return 2; } void main(void) { char name[20]="tmp.txt"; get_file_line(name,0); }
有点长,但是也算一种办法啦。
相关文章推荐
- Linux读取一行文本的方法
- Linux读取一行文本的方法
- Linux读取一行文本的方法
- Java 读取文本指定的某一行内容的方法
- QT读取文本(字符串)最后一行的方法
- 读取文本数据文件的某一行的方法
- php读取csv文件,在linux上出现中文读取不到的情况 解决方法
- java读文本文件内容---传入path来读取方法
- Linux基础(13)文本查找利器find的使用方法
- matlab对于固定长度的行的文本,最后一行的读取
- Java:InputStream读取文本文件内容出现乱码问题的解决方法
- linux:shell 读取文件每一行
- 编码实现读取文本的方法
- 字符读取流缓冲区-读一行的方法readLine()
- AJAX返回XML格式文本的读取方法
- linux 下 读取某个文件的某一行或者某几行
- WPF RichTextBox读取存储文本的方法和常用属性
- linux终端特殊键ESC序列读取方法
- fgets()重复读取最后一行的分析及解决方法
- 读取文本乱码解决方法