第一种方法:
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[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);
}
有点长,但是也算一种办法啦。
分享到:
相关推荐
`std::getline()`函数用于读取一行内容。 3. **同时读写文件**: 如果需要同时读写文件,可以使用`fstream`类。例如: ```cpp std::fstream file("test.txt", std::ios::in | std::ios::out); if (!file) { ...
在DOS环境下,没有像Linux的`head`和`tail`这样的内置命令来直接读取文件的第一行或最后一行。不过,我们可以利用内部命令如`type`和`findstr`来实现类似的功能。 首先,让我们来看看如何使用`type`命令。`type`...
`read(unit, '(A)', iostat=iostat)`读取一行文本数据,并将其存储在`line`变量中。 如果你的文本文件包含特定格式的数据,例如数值或特定的分隔符,你可能需要使用不同的格式描述符来解析数据。例如,如果数据以...
这段代码打开指定的文件,读取内容,并以16进制格式一行接一行地打印出来。`Makefile`则用于编译这个程序,通常包含以下内容: ```makefile CC = gcc CFLAGS = -Wall all: readimage readimage: readimage.c $...
这个程序,名为`LinuxTxtToWindowsTxt.exe`,可能是用C、C++或其他编程语言编写的,其功能是读取Linux格式的文本文件,将其中的LF行结束符替换为CRLF,确保在Windows环境下正常显示。 使用这个程序的步骤通常包括...
为了解决这个问题,这个名为"nx2xp"的程序可能是用Python、Perl、awk或其他类似脚本语言编写的,其工作原理可能是读取Linux格式的文件,然后在每一行末尾添加缺失的CR字符,从而将其转换为Windows可识别的格式。...
LINUX处理文本命令 处理文本和文本文件的命令 一. sort 文件排序, 通常用在管道中当过滤器来使用. 这个命令可以依据指定的关键字或指定的字符位置, 对文件行进行排序. 使用-m选项, 它将会合并预排序的输入文件. 想...
sed 的工作原理是从文件或管道中读取一行,处理一行,输出一行;再读取一行,再处理一行,再输出一行,直到最后一行。每当处理一行时,把当前处理的行存储在临时缓冲区中,称为模式空间(Pattern Space),接着用 ...
标题 "读取指定文件每行并运行cmd命令" 涉及的核心知识点是通过编程方式读取文本文件的每一行内容,并将这些内容作为命令在命令行(CMD)环境中执行。这种操作通常在自动化脚本或者系统管理任务中非常有用。下面我们...
- `awk`以逐行的形式处理文件,首先执行`BEGIN`语句块,然后循环读取每一行执行`pattern`语句块,最后执行`END`语句块。 - 基本选项:`awk`还支持各种选项来增强其功能,如`-F`用于指定字段分隔符等。
在这个例子中,我们使用`std::getline()`函数读取文件的每一行。这个函数接受三个参数:输入流,用于存储读取行的字符串变量,以及一个分隔符(通常为'\n',表示行结束符)。当文件读取完成后,记得关闭输入流,这是...
一旦处理完毕,sed输出当前行的内容,并读取下一行到模式空间中,然后重复应用编辑命令。这个过程一直持续到文件的最后一行。 如果sed中有多个编辑命令,它们的顺序会影响处理的结果。例如,sed 's/pig/cow/;s/cow/...
使用sed抓取第二行,-n ‘2p’代表第二行,-n ‘1,3p’代表第一到三行,以回车换行符区分。执行 udhcpc | grep “DNS” | sed -n ‘2p’ 使用awk抓取第四列,$4代表第四列,以空格区分。执行 udhcpc | grep “DNS”...
前言 本文主要给大家介绍了关于使用Shell脚本循环读取文件每一行的相关内容,分享出来供大家参考学习,下面话不多说...While循环中read命令从标准输入中读取一行,并将内容保存到变量line中。在这里,-r选项保证读入的
例如,`fopen()`用于打开文件,`fgets()`用于读取一行,`fscanf()`用于解析格式化的输入,`fprintf()`用于格式化输出,而`fclose()`则用于关闭文件。 2. **解析ini文件结构** ini文件的结构主要包括三部分:节、键...
例如,使用`FileInputStream`, `BufferedReader`, `Files.lines()`等方法,可以读取文件并按行处理,避免一次性加载整个文件。 这些技术在处理大型文本数据时非常实用,尤其是当内存有限或需要分布式处理时。通过...
可以使用类似读取TXT文件的方法来读取BAT文件的文本内容。 4. 读取整个文本文件内容: - 如果你需要一次性读取整个文本文件的内容,可以使用`Input`函数。例如,`lenfile = LOF(filenum)`获取文件长度,`strfile =...
Linux系统中的文本处理工具众多,其中awk是被誉为“文本处理三剑客”之一的重要成员。awk的名字来源于其三位创始人——Aho, Weinberger, Kernighan的首字母缩写,它最初是在AT&T实验室开发的。现在,我们最常见的awk...