Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DanielPy en 16 Mayo 2015, 21:55 pm



Título: Copiar en archivo frases con varias líneas(renglones)[C]
Publicado por: DanielPy en 16 Mayo 2015, 21:55 pm
Hola a todos.-

Citar
Cada vez que emites
un juicio o una crítica,
Estás enviando algo que
terminará por volver a ti.-
Para hacer algo como esto se me antoja declarar una estructura con 4 variable char y 4 int (índice) para poder luego buscar alguna palabra que haga referencia a la frase y poder imprimirla filtrándola por el índice, consideran que estoy bien encaminado o lo arian de otra manera.-

Desde ya muchas gracias por el tiempo que le dediquen al tema.-

Saludos.
Daniel


Título: Re: Copiar en archivo frases con varias líneas(renglones)[C]
Publicado por: ivancea96 en 17 Mayo 2015, 01:36 am
No entiendo cuál es el problema. No entiendo qué es lo que quieres hacer. ¿Escribir cadenas de caracteres en un archivo?


Título: Re: Copiar en archivo frases con varias líneas(renglones)[C]
Publicado por: DanielPy en 17 Mayo 2015, 03:59 am
Hola.
Lo que quiero es escribir en un archivo frases con más de un renglón (esto de renglón desconozco si es correcto) y luego recuperar lo escrito para mostrarlo en pantalla, lo que pasa es que me parece que debería tener un índice para hacer un filtro para cada frase, si lo hago con un bucle no sé cómo hacer para que luego el programa sepa donde comienza una frase y cuando termina y comienza la siguiente (que lio).-
Espero que se entienda un poco más.-

Saludos.
Daniel   


Título: Re:
Publicado por: ivancea96 en 17 Mayo 2015, 11:35 am
Un renglón supongo que te refieres a un salto de linea. Eso es el caracter '\n'.
Para leer linea a linea, basta detectar ese caracter mientras lees.


Título: Re: Copiar en archivo frases con varias líneas(renglones)[C]
Publicado por: DanielPy en 17 Mayo 2015, 15:35 pm
Hola Ivancea96.
Evidentemente no logro ser lo suficientemente claro, si estuviéramos frente a la misma computadora estoy segurísimo que me entenderías pero escribiendo no logro expresar con claridad lo que deseo hacer (por lo menos en este caso).-
Ahora mismo se me antoja declarar un arreglo char de 10 x 80 meterlo en un bucle y con esto en cada Enter logro el carácter de nueva línea, luego al volcarlo a un archivo obtendria el cometido (me parece), lo que no puedo entender todavía es como imprimirlo en pantalla desde el archivo.-
Ejemplo:
Citar
Cada vez que emites
un juicio o una crítica,
Estás enviando algo que
terminará por volver a ti.-
     
Suponiendo que para buscar en el archivo la frase recuerdo que contenía la palabra algo, ¿Qué patrón (índice) utilizo para mostrar la frase completa?.-
Voy a seguir practicando, seguramente no estoy muy lejos de lograrlo, si tenes algo más para aportar, muy agradecido.-

Saludos.
Daniel   


Título: Re: Copiar en archivo frases con varias líneas(renglones)[C]
Publicado por: ivancea96 en 17 Mayo 2015, 16:08 pm
Una vez encontrada la palabra, basta separar la frase por puntos. O por saltos de linea, como quieras hacerlo.


Título: Re: Copiar en archivo frases con varias líneas(renglones)[C]
Publicado por: DanielPy en 17 Mayo 2015, 19:07 pm
Hola.
Sólo a titulo aclaratorio, no olvides que el archivo va a tener por ej. 50 frases distintas, tengo que implementar alguna manera para saber dónde comienza y termina una determinada frase.-
Por el momento, el ej. Que dejo a continuación me parece viable y sino podría dejar un espacio en blanco entre una frase y otra.- 

Citar
Cada vez que emites                                                                                        1
un juicio o una crítica,                                                                                       1
Estás enviando algo que                                                                                    1
terminará por volver a ti.-                                                                                 1
Abraza las cosas y personas malas como si fueran tu más preciada joya,              2
son tus más grandes maestros de paciencia sabiduría y amor                               2
y cuando lo abrazas dejan de causar dolor.-                                                        2
-------------------------------------                                                                         3 
-------------------------------------                                                                         3
Por el momento(atento a mis conocimientos) me parece una aceptable solución.-     

Saludos.
Daniel   


Título: Re: Copiar en archivo frases con varias líneas(renglones)[C]
Publicado por: rir3760 en 1 Junio 2015, 17:10 pm
Sólo a titulo aclaratorio, no olvides que el archivo va a tener por ej. 50 frases distintas, tengo que implementar alguna manera para saber dónde comienza y termina una determinada frase.
Puedes colocar primero una linea cuyo único contenido sea el numero de lineas que componen la frase la cual viene a continuación, siguiendo tu ejemplo la información en el archivo se modificaría a:
Código:
4
Cada vez que emites
un juicio o una crítica,
Estás enviando algo que
terminará por volver a ti.
3
Abraza las cosas y personas malas como si fueran tu más preciada joya,
son tus más grandes maestros de paciencia sabiduría y amor
y cuando lo abrazas dejan de causar dolor.
...

La lectura del archivo seria, mas o menos, así:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define NOM_ARCHIVO  "Input.txt"
  5. #define MAX_CHARS  4096
  6.  
  7. int main(void)
  8. {
  9.   FILE *in;
  10.   char linea[MAX_CHARS];
  11.   unsigned num_lineas;
  12.   unsigned i;
  13.   int frase;
  14.  
  15.   if ((in = fopen(NOM_ARCHIVO, "r")) == NULL){
  16.      perror(NOM_ARCHIVO);
  17.      return EXIT_FAILURE;
  18.   }
  19.  
  20.   frase = 1;
  21.   while (fgets(linea, MAX_CHARS, in) != NULL && sscanf(linea, "%u", &num_lineas) == 1){
  22.      printf("Frase %d:\n", frase);
  23.  
  24.      for (i = 0; i < num_lineas && fgets(linea, MAX_CHARS, in) != NULL; i++)
  25.         printf("%s", linea);
  26.  
  27.      frase++;
  28.   }
  29.   fclose(in);
  30.  
  31.   return EXIT_SUCCESS;
  32. }

Un saludo