Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Alberto n en 5 Marzo 2019, 02:28 am



Título: Como puedo detectar una palabra y comprobar si la 2 linea esta vacía en C
Publicado por: Alberto n en 5 Marzo 2019, 02:28 am
Tengo el siguiente código en C, el cual lee el archivo.

#include <stdio.h>
#include <stdlib.h>

int main(){
  FILE* archivo = fopen("leer.txt","r");
  char * buffer = NULL;
  int i, c;
  c = fgetc(archivo);
  while(!feof(archivo))
    {
      buffer = (char*)realloc(NULL, sizeof(char));
        i = 0;
      while( c != '\n')
        {
          buffer = c;
          i++;
          buffer = (char*)realloc(buffer, (i+1)*sizeof(char));
          c = fgetc(archivo);
        }
      /*Agrego el \n al buffer*/
      buffer = (char*)realloc(buffer, (i+2)*sizeof(char));
      buffer = c;
      buffer[i+1] = 0;
      /*Trabajar con el buffer*/
      printf("%s", buffer);
      free(buffer);
      c = fgetc(archivo);
    }
  
}


lo que deseo es que al detectar una palabra, este cuente dos lineas más y verifique si la linea esta vacía (en blanco), si es así, que no la copie al archivo nuevo, y continué buscando en las siguientes lineas.

Soy bastante nuevo en esto, y no he logrado como resolverlo, por eso pido algo de ayuda.

Tengo un archivo con estas lineas, donde la palabra que deseo buscar es: "FACTOR", al encontrarla debe contar 2 lineas más y comprobar si esa linea esta en blanco (vacía), si es así, no copiar esa linea y continuar buscando la misma palabra en las siguientes lineas y volver a comprobar al sumar 2 lineas más es vacía.

1- %%XGF (FACTOR)
2- P0
3-
4-                                                                         FUERA
5-   LEIVA

Pido de su ayuda, ya que no he podido realizarlo.


Título: Re: Como puedo detectar una palabra y comprobar si la 2 linea esta vacía en C
Publicado por: srWhiteSkull en 5 Marzo 2019, 05:34 am
Usa banderas. Por ejemplo, una vez que encuentresun salto de línea usa una variable y la pones a 1. Luego si lee un caracter que no sea un espacio pones esa variable a 2. Si al encontrar otro salto de línea la variable esa, la bandera, sigue a 1 significará que esa línea anterior estaba vacía y de lo contrario que contenía algo. Si la finalidad es descartar las líneas vacías usa un contenedor temporal y luego vuelcalo donde quieras en el caso de contener algo, usa un bucle si eres novato (existe funciones para copiar bloques de memoria, pero hay que usar punteros).