2019独角兽企业重金招聘Python工程师标准>>>
第一种方法:
1.网上流行的一个方法: 打印出每行的文本信息。
#include
#include
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
#include
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
执行结果,如下所示:
第二种方法:#include
#include
#include
#include
#include
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(nm )
{
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);
}