C/C++ organiza instruções contendo um determinado campo de identificação em um arquivo

prefácio

Em nosso trabalho, podemos encontrar esse problema. O conteúdo de um arquivo é confuso (visto principalmente no log de saída) e precisamos encontrar todas as instruções que contêm um determinado campo. Se não usarmos outros métodos, é realmente uma dor de cabeça. A seguir, fornecerei um código que pode resolver problemas semelhantes.

programação

1. Tomemos como exemplo o arquivo curent.log com o sufixo .log (o código é variável, podendo também ser um arquivo com outros formatos de sufixo), conforme mostra a figura abaixo. O conteúdo interno é muito confuso, incluindo muitos TableKey . Se quisermos encontrar a instrução que contém TableKey: 986375 , é simplesmente difícil fazê-lo manualmente. 2. Não tenha medo, vamos fazer upload do código diretamente, classificar todas as instruções que contêm TabelKey: 986375 e gravá-las em um novo arquivo new.log . Dicas: O arquivo current.log deve ser colocado no diretório de depuração . Diferentes editores têm diferentes diretórios de depuração . Você pode pesquisar onde o diretório está no projeto.
insira a descrição da imagem aqui

// 引入头文件
#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. Execute o código acima no editor (às vezes encontrando problemas de compatibilidade de versão), um novo arquivo new.log será criado e seu conteúdo é o que precisamos, conforme mostrado na figura abaixo. Todas as instruções contendo TableKey:986375 estão listadas para que possamos continuar nosso trabalho.
insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/HYNN12/article/details/107223891
Recomendado
Clasificación