Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Risketo en 19 Agosto 2012, 01:44 am



Título: Incrementando en fichero
Publicado por: Risketo en 19 Agosto 2012, 01:44 am
Aquí vengo con otra duda, bueno mas que duda un problema que no se solucionar...
Creo un fichero en el cual escribo lo que quiera, pero, quiero que cada vez que se ejecute el programa y se escriba se ponga un identificador en dicho texto y que empiece desde el numero 1 y se vaya incrementando cada vez que se escribe, para cuando abra el fichero ponga 1 y la frase, 2 y la otra frase etc. Lo traté de hacer con fread pero pasa del 1 al 3 al 7 etc... La verdad es que no se donde estará el error, ni si es un error tonto o una payasada.

Código
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. int main(){
  5. FILE *fichero;
  6. unsigned int ultimo=1;
  7. unsigned int *ptr;
  8. char texto[50];
  9.  
  10. if ((fichero = fopen ("fread.lst","rt")) != NULL){
  11.  
  12. fread (&ptr, sizeof (ultimo),1,fichero);
  13.  
  14. while (! feof(fichero)){
  15. ptr=&ultimo;
  16. fread (&ptr, sizeof (ultimo),1,fichero);
  17.  
  18. ultimo++;
  19. }
  20. }
  21.  
  22. fichero = fopen ("fread.lst","a+");
  23. fprintf (fichero,"%d",ultimo);
  24. fgets (texto,49,stdin);
  25. fprintf(fichero,"\n%s", texto);
  26.  
  27. fclose (fichero);
  28.  
  29. return 0;
  30. }
  31.  

Muchas gracias por vuestro tiempo.


Título: Re: Incrementando en fichero
Publicado por: xiruko en 19 Agosto 2012, 02:31 am
no entiendo por que en los fread() le pasas &ptr. ptr es un puntero a int, el cual no inicializas ya sea diciendole que apunte a alguna variable o reservandole memoria, y encima lo pasas por referencia con lo que a fread() le estas pasando la direccion de memoria del puntero :huh:

luego dentro del while tampoco entiendo cual es la finalidad de ptr=&ultimo, o directamente para que usas el puntero ptr. ademas, por cada caracter que lees, sumas 1 a "ultimo", cuando por cada linea deberias sumar 1. si la estructura del fichero siempre es 1 numero, 1 espacio, y luego una frase, podrias leer caracter por caracter, y si este es igual a '\n' sumar 1 a "ultimo".

ademas que abres el fichero 2 veces, podrias abrirlo solo 1 vez en modo lectura y escritura y con fseek() cuando lo necesites te situas al final de este.

en fin, que no me aclaro mucho con tu codigo... quizas soy yo asi que esperemos a que alguien mas conteste porque seguramente se me hayan pasado varias cosas.

un saludo!

edito: tenia ganas de programar algo y me puse con tu ejercicio. te dejo el code por si te sirve. este incluye la frase que se le pase por linea de comandos entre "" en el archivo con el numero que le toque al inicio.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int main(int argc, char** argv) {
  5.  
  6. char fichero[]="prueba.txt", aux;
  7. unsigned int num=0, i;
  8. FILE *f;
  9.  
  10. //comprobaciones de error
  11. if (argc != 2) {
  12. printf("MODO DE USO: %s \"frase\"\n", argv[0]);
  13. exit(0);
  14. }
  15.  
  16. if (!(f=fopen(fichero, "r+"))) {
  17. printf("ERROR: No se pudo abrir %s.\n", fichero);
  18. if (!(f=fopen(fichero, "w"))) {
  19. printf("ERROR: No se pudo crear %s.\n", fichero);
  20. exit(1);
  21. } else printf("Fichero %s creado.\n", fichero);
  22. }
  23.  
  24. //lineas totales en el archivo
  25. do {
  26. i=fread(&aux, sizeof(char), 1, f);
  27. if (aux == '\n') num++;
  28. } while (i > 0);
  29. if (num == 0) num++;
  30.  
  31. //escribimos el numero y la frase
  32. fprintf(f, "%u %s\n", num, argv[1]);
  33.  
  34. fclose(f);
  35. return 0;
  36. }
  37.  


Título: Re: Incrementando en fichero
Publicado por: Risketo en 20 Agosto 2012, 00:51 am
Lo del puntero la verdad es que no se si estará muy bien lo que hice, hace nada que empece a verlos.
Simplemente quería que fread lea el valor de la variable "ultimo" y le sume +1, para tener identificadas las frases.

Muchas gracias por poner tu código, no conocía lo de: modo de uso "nombre programa" + frase.