C++读取文本文件的最后一行,倒数第N行,倒数后N行,以及根据指定字符串在文本文件里逐行匹配并读取该行数据

我们知道文件的从头到尾按行读取是非常方便的。但是,有的时候我们只需要文件的最后一行数据来进行分析处理。最近因项目需要,所以我找了许多关于文件读取的相关资料尤其是针对于获取文件的最后一行或者后N行。把我最近的成果分享给大家。可以拿来直接用,也可以用来参考学习。也欢迎大家一起讨论。。。

C++直接获取文本文件的最后一行

#include <fstream>
#include <string>
#include <iostream>
#include<Windows.h>
#include<stdio.h>
#include <vector>
using namespace std;
int main()
{
	ifstream File("C:\\Users\\WuHen\\Desktop\\py\\3.txt",ios::in|ios::out);
	string line, last_line;
    //这里采用了很笨但是很直观的方法就是逐行读取,读到最后一行输出,适合不太大的文件
	while (getline(File, line))
	{
		last_line = line;
	}
	cout << last_line << endl;
	File.close();
	system("pause");
	return 0;
}

C++输出倒数第N行的数据


#include <fstream>
#include <string>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
	std::ifstream  File("C:\\Users\\WuHen\\Desktop\\py\\3.txt", std::ios::ate);
	//std::ifstream  fin("/var/log/test.log", std::ios::ate);
	if (!File)
	{
		cout << "cannot open file!";
		return -1;
	}
	// 先倒回文件末尾两个字符
	File.seekg(-2, File.cur);
	// 假定反向读第3行的记录
	int lineCount = 3;
	for (int i = 0; i < lineCount; i++)
	{
		// 查看前一个字符是否为回车符
		while (File.peek() != File.widen('\n'))
		{
			File.seekg(-1, File.cur);
		}
		// 走到这里表示跳过一行了,所以继续向前跳直到到3行
		File.seekg(-1, File.cur);
	}

	File.seekg(2, File.cur);
	std::string  line;
	//如果想将倒数lineCount行都输出,再加入循环while
	//while (getline(fin, line))
	//{
	getline(File, line);//最后一行为‘\n’,输出为空
	getline(File, line);
	cout << line << endl;
	//}
	File.clear();
	File.close();
	system("pause");
	return 0;
}

如果想将倒数lineCount行都输出,则输出的时候再写一个循环while,如下。

C++输出倒数后N行的数据


#include <fstream>
#include <string>
#include <iostream>
#include <vector>
using namespace std;
int main()
{
    std::ifstream  File("C:\\Users\\WuHen\\Desktop\\py\\3.txt", std::ios::ate);
    //std::ifstream  fin("/var/log/test.log", std::ios::ate);
    if (!File)
    {
        cout << "cannot open file!";
        return -1;
    }
    // 先倒回文件末尾两个字符
    File.seekg(-2, File.cur);
    // 假定反向读第3行的记录
    int lineCount = 3;
    for (int i = 0; i < lineCount; i++)
    {
        // 查看前一个字符是否为回车符
        while (File.peek() != File.widen('\n'))
        {
            File.seekg(-1, File.cur);
        }
        // 走到这里表示跳过一行了,所以继续向前跳直到到3行
        File.seekg(-1, File.cur);
    }

    File.seekg(2, File.cur);
    std::string  line;
    //如果想将倒数lineCount行都输出,咋加入循环while
    getline(File, line);//输出为‘\n’
    while (getline(File, line))
    {
        cout << line << endl;
    }
    File.clear();
    File.close();
    system("pause");
    return 0;
}

最后我们再来加一组功能,比如我从文本1里面读取最后一行数据或者倒数第n行数据,进行字符串的截取,要在文本2里去找与之匹配的那行数据,就是接下来的。。。

C++指定字符串在文本文件里逐行匹配

在一个文件里查找指定的字符串(这里面你可以自己传参进去)所在行,并读取改行信息

若要记录行数,再加一个行计数器。。。


#include <fstream>
#include <string>
#include <iostream>
#include<Windows.h>
#include<stdio.h>
#include <vector>
using namespace std;
int main()
{
    FILE *File;
    char find_str[250] = "reactor.connectTCP";//匹配的字符中如果有‘\’要换成‘\\’
    char file_str[521];
    File = fopen("C:\\Users\\WuHen\\Desktop\\py\\3.txt", "r");
    if (File == NULL)
    {
        cout << "cannot open file!!!" << endl;
        return false;
    }
    while (fgets(file_str,sizeof(file_str),File))
    {
        if (strstr(file_str, find_str))
        {
            cout << file_str;
            fclose(File);
        }
    }
    system("pause");
    return 0;
}

 

  • 10
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值