-
-
Save parzibyte/8818b7c74e02272402b177289b0f0db0 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
https://parzibyte.me/blog | |
*/ | |
#include <stdio.h> | |
#include <string.h> | |
#define TAMANIO_BUFER 1000 | |
#define TAMANIO_MAXIMO_CONTENIDO 10000 | |
void concatenarCharACadena(char c, char *cadena) | |
{ | |
char cadenaTemporal[2]; | |
cadenaTemporal[0] = c; | |
cadenaTemporal[1] = '\0'; | |
strcat(cadena, cadenaTemporal); | |
} | |
void extraerTexto(char *nombreArchivo) | |
{ | |
FILE *archivo; | |
unsigned char bufer[TAMANIO_BUFER]; | |
archivo = fopen(nombreArchivo, "r"); | |
if (archivo == NULL) | |
{ | |
printf("Error abriendo el archivo"); | |
return; | |
} | |
// Leer archivo | |
char contenido[TAMANIO_MAXIMO_CONTENIDO] = ""; | |
while (!feof(archivo)) | |
{ | |
fread(bufer, sizeof(char), sizeof(bufer), archivo); | |
// Almacenar contenido en el búfer | |
strcat(contenido, (const char *)bufer); | |
} | |
// Extraer lo que hay entre <body> y </body> | |
const char inicioEtiqueta[] = "<body>"; | |
const char finEtiqueta[] = "</body>"; | |
size_t longitudInicioEtiqueta = strlen(inicioEtiqueta); | |
char *punteroInicio = strstr(contenido, inicioEtiqueta) + longitudInicioEtiqueta; | |
char *punteroFin = strstr(contenido, finEtiqueta); | |
if (punteroInicio == NULL || punteroFin == NULL) | |
{ | |
printf("No se encontraron las etiquetas"); | |
return; | |
} | |
char cuerpoHtml[TAMANIO_MAXIMO_CONTENIDO] = ""; | |
char contenidoLimpio[TAMANIO_MAXIMO_CONTENIDO] = ""; | |
size_t longitud = punteroFin - punteroInicio; | |
// Copiar el contenido del cuerpo a cuerpoHtml | |
strncpy(cuerpoHtml, punteroInicio, longitud); | |
int i = 0; | |
const char simboloInicio = '<'; | |
const char simboloFin = '>'; | |
int ignorando = 0; | |
// Recorrer el cuerpo e ignorar etiquetas | |
for (i = 0; i < strlen(cuerpoHtml); i++) | |
{ | |
char caracterActual = cuerpoHtml[i]; | |
// Si encontramos una etiqueta abriendo, establecemos la bandera en true | |
if (caracterActual == simboloInicio) | |
{ | |
ignorando = 1; | |
} | |
// Si encontramos el del final, establecemos la bandera en false | |
if (caracterActual == simboloFin) | |
{ | |
ignorando = 0; | |
} | |
// Si no debo ignorar este carácter, y éste carácter no es >, entonces es un carácter válido | |
if (!ignorando && caracterActual != simboloFin) | |
{ | |
// Aquí se puede hacer cualquier cosa con el char. Yo solo lo estoy concatenando | |
concatenarCharACadena(caracterActual, contenidoLimpio); | |
} | |
} | |
// Aquí se puede hacer cualquier cosa con la cadena | |
printf("%s", contenidoLimpio); | |
} | |
int main(int argc, char const *argv[]) | |
{ | |
extraerTexto("index.html"); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment