Linux读取一行文本的方法

来源:互联网 发布:python入门教程pdf 编辑:程序博客网 时间:2024/05/16 14:11
第一种方法:

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 7void 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[n]<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[n]>=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);}


0 0
原创粉丝点击