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.
// 引入头文件
#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.