C/C++ organiza declaraciones que contienen un determinado campo de identificación en un archivo

prefacio

En nuestro trabajo, podemos encontrarnos con un problema de este tipo. El contenido de un archivo es desordenado (se ve principalmente en el registro de salida) y necesitamos encontrar todas las declaraciones que contienen un determinado campo. Si no utilizamos otros métodos, es realmente un dolor de cabeza cosas. A continuación, proporcionaré un código que puede resolver problemas similares.

programación

1. Tomemos como ejemplo el archivo curent.log con el sufijo .log (el código es variable y también puede ser un archivo con otros formatos de sufijo), como se muestra en la siguiente figura. El contenido interno es muy desordenado e incluye una gran cantidad de TableKey . Si queremos encontrar la declaración que contiene TableKey: 986375 , simplemente es difícil hacerlo manualmente. 2. No tenga miedo, carguemos el código directamente, clasifiquemos todas las declaraciones que contienen TabelKey: 986375 y escríbalas en un nuevo archivo new.log . Consejos: El archivo curent.log debe colocarse en el directorio de depuración . Diferentes editores tienen diferentes directorios de depuración . Puede buscar dónde está el directorio en el proyecto.
inserte la descripción de la imagen aquí

// 引入头文件
#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. Ejecute el código anterior en el editor (a veces encuentra problemas de compatibilidad de versiones), se creará un nuevo archivo new.log y su contenido es lo que necesitamos, como se muestra en la siguiente figura. Se enumeran todas las declaraciones que contienen TableKey:986375 para que podamos continuar con nuestro trabajo.
inserte la descripción de la imagen aquí

Supongo que te gusta

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