C/C++ 将包含某个标识字段的语句整理到一个文件内

前言

工作中我们可能遇到这样的问题,一个文件的内容杂乱无章(多见于输出的日志),而我们又要找全部的包含某个字段的语句,如果不利用其他方法,真的是一件很头疼的事情。接下来奉上一篇可以解决类似问题的代码。

编程

1、 我们以后缀是 .log 的文件 curent.log 为例(代码是可变的,也可以是其他后缀格式的文件),如下图所示。里面的内容很乱,包含了很多的TableKey。如果我们想找包含TableKey:986375的语句,只靠手工的话简直难于上青天。
在这里插入图片描述
2、不怕,我们直接上代码,把包含TabelKey:986375的所有语句整理出来,并写入到一个新文件new.log内。
提示: curent.log 文件要放在 debug 目录下,不同的编辑器,其 debug 目录不同,可以自己搜一下该目录 在项目工程的什么地方。

// 引入头文件
#include "stdafx.h"
#include <iostream>
#include <malloc.h>
#include <stdlib.h>

using namespace std;
#define FILESIZE 1024

string PATHREAD = "curent";   		// 需要读取的文件名(杂乱无章的那个)
string PATHWRITE = "new";  	  		// 写入到新的文件名(不用提前创建,代码会自动创建该文件)
string TABLEKEY = "986375"; 	  	// 读取有“986375”字段标识的语句

// 编辑读取文件的函数
FILE *READFILE()
{
	PATHREAD += ".log";		// 文件后缀名(可根据实际文件后缀进行修改)
	FILE* fd = fopen(PATHREAD.c_str(),"r");   //文件追加 读取用r  
	if (fd == NULL)
	{
		return NULL;
	}
	return fd;
}

// 编辑写入新文件的函数
FILE* WRITEFILE()
{
	PATHWRITE += ".log";	// 新文件后缀名保持一致
	FILE* fd = fopen(PATHWRITE.c_str(),"w");	// 文件追加,写入用w
	if (fd == NULL)
	{
		return NULL;
	}
	return fd;
}

// 在main函数内调用
int main()
{
	char temp[FILESIZE];
	string Table = "TableKey:";		// 标识字段
	Table += TABLEKEY;				// 完善要查找的字段
	FILE *write = WRITEFILE();
	FILE *read = READFILE();

	if (write==NULL || read==NULL)
	{
		exit(0);
	}
	
	// 读取、写入成功之后,进行数据操作
	char *s = fgets(temp,FILESIZE,read);
	while (s!=NULL)
	{
		if (!strstr(temp,Table.c_str()))
		{
			memset(temp,0,FILESIZE);
			s = fgets(temp,FILESIZE,read);
			continue;
		}
		fputs(temp,write);
		memset(temp,0,FILESIZE);
		s = fgets(temp,FILESIZE,read);
	}

	fclose(write);
	fclose(read);
	return 0;
}

3、在编辑器内执行上述代码(有时会遇到版本兼容性问题),新文件new.log就会被创建出来,其内容就是我们需要的,如下图所示。所有包含TableKey:986375的语句都被列出来了,这样就可以继续我们的工作了。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值