elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Tutorial de archivos en lenguaje C. -
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] 3 4 Ir Abajo Respuesta Imprimir
Autor Tema: Tutorial de archivos en lenguaje C. -  (Leído 15,942 veces)
MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.524


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Tutorial de archivos en lenguaje C. -
« Respuesta #10 en: 26 Agosto 2016, 18:49 pm »

Creo que sera evidente que no soy experto en C/C++, pero no seria valido reemplazar esto:

Código
  1. ...
  2. fprintf(fptr, "%s", recordatorio->nombre);
  3. fprintf(fptr, "%s", recordatorio->direccion);
  4. fprintf(fptr, "%s", recordatorio->ciudad);
  5. fprintf(fptr, "%s", recordatorio->correo);
  6. fprintf(fptr, "%s", recordatorio->telefono);
  7. fprintf(fptr, "%s", recordatorio->celular);
  8. fprintf(fptr, "%s", recordatorio->otros);
  9. ...
  10.  

por algo como esto?

Código
  1. ...
  2. fprintf(fptr, "%s,%s,%s,%s,%s,%s,%s", (recordatorio->nombre, recordatorio->direccion, recordatorio->ciudad, recordatorio->correo, recordatorio->telefono, recordatorio->celular, recordatorio->otros));
  3. ...
  4.  

Desconozco si fprintf se puede usar de esa forma, pero imagino que debe existir algo como para hacer eso y separar los valores usando comas (como en el ejemplo) o usando ";" o el separador que sea...

Saludos!


En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Tutorial de archivos en lenguaje C. -
« Respuesta #11 en: 26 Agosto 2016, 19:16 pm »

Hola, coterráneo.
Parece que igual toma el salto de linea '\n', me da el mismo resultado, tu código tiene 2 paréntesis de más. -
Saludos.


« Última modificación: 27 Agosto 2016, 13:45 pm por NOB2014 » En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Tutorial de archivos en lenguaje C. -
« Respuesta #12 en: 26 Agosto 2016, 20:43 pm »

Ya lo solucione, dejo el código por si a alguien le pasa algo parecido. -


Código
  1. void reemplazar( Recordatorio *recordatorio ){
  2. char *p=NULL;
  3. if((p=strchr(recordatorio->nombre, '\n'))){
  4. *p='|';
  5. }
  6. if((p=strchr(recordatorio->direccion, '\n'))){
  7. *p='|';
  8. }
  9. if((p=strchr(recordatorio->ciudad, '\n'))){
  10. *p='|';
  11. }
  12. if((p=strchr(recordatorio->correo, '\n'))){
  13. *p='|';
  14. }
  15. if((p=strchr(recordatorio->telefono, '\n'))){
  16. *p='|';
  17. }
  18. if((p=strchr(recordatorio->celular, '\n'))){
  19. *p='|';
  20. }
  21. if((p=strchr(recordatorio->otros, '\n'))){
  22. *p='|';
  23. }
  24. }
Saludos.
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Tutorial de archivos en lenguaje C. -
« Respuesta #13 en: 26 Agosto 2016, 23:35 pm »

3 - Posicionarse en el último registro.  

Si tengo lo siguiente en el archivo. -

Citar
1 - xxxxxxxx|xxxxxxxxxxxx|xxxxx
2 - xxxxxxxx|xxxxxxxxxxxx|xxxxx
3 - xxxxxxxx|xxxxxxxxxxxx|xxxxx
4 - xxxxxxxx|xxxxxxxxxxxx|xxxxx
5 - xxxxxxxx|xxxxxxxxxxxx|xxxxx
6 - xxxxxxxx|xxxxxxxxxxxx|xxxxx
7 - xxxxxxxx|xxxxxxxxxxxx|xxxxx
Lo que quiero es recuperar el número 7 para agregarle 1 y así tener un orden de ingreso, me podrían dar alguna idea de como intentarlo. -
Saludos.
« Última modificación: 27 Agosto 2016, 13:23 pm por NOB2014 » En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Tutorial de archivos en lenguaje C. -
« Respuesta #14 en: 26 Agosto 2016, 23:57 pm »

Cuando se tiene registros de longitud dinamica, y no tienes los datos cargados en memoria tienes que leerlos todos y reescribir todo el archivo o solo desde la parte que cambio.

Segun se te facilite si lo reescribe todo solo haces un ciclo y escribes desde 0 todo.

Si solo quieres modificar la parte modificada, tienes que situarte donde finaliza el ultimo registro no afectado fseek() y empezar a escribir apartir de ahi

Saludos
En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Tutorial de archivos en lenguaje C. -
« Respuesta #15 en: 27 Agosto 2016, 04:32 am »

Hola.
Al fin parece que lo conseguí. -
Una consultita, hay otra manera para hacer lo mismo sin utilizar '\n'. -
Código
  1. FILE *fptr = fopen( "fichero.txt", "r+" );
  2.  
  3. orden = cantCampos( fptr, orden );
  4.  
  5. int cantCampos( FILE *fptr, int orden ){
  6. char caracter;
  7. while ( !feof ( fptr ) ){
  8. caracter = getc( fptr );
  9. if( caracter == '\n' )
  10. orden++;
  11. }
  12.  
  13. return orden;
  14. }
Saludos.
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Tutorial de archivos en lenguaje C. -
« Respuesta #16 en: 6 Septiembre 2016, 02:48 am »

Hola, gente. -
Tengo un inconveniente con el siguiente código, como se muestra en la captura hace como un enter en el último campo antes de tiempo, hice unos cambios para solucionarlo y nada, los primeros 7 registros los alinee a mano. -


4 - Salto de línea anticipado en el último campo.




Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void limpiar( void );
  5.  
  6. int main( void ){
  7. int n = 1, ch, orden=-1;
  8. char nombre[80], caracter;
  9. double salario;
  10. FILE *pArchivo = fopen( "pruebaE.txt", "a+" );
  11. if( pArchivo != NULL ){
  12. while ( !feof ( pArchivo ) ){
  13. caracter = getc( pArchivo );
  14. if( caracter == '\n' )
  15. orden++;
  16. }
  17. do{
  18. limpiar();
  19. orden++;
  20. printf( "\n\n El proximo empleado es el numero..: %d", orden );
  21. printf( "\n\n Introduzca 0 para finalizar mayor para continuar.....:" );
  22. scanf( "%d", &n );
  23. while ((ch = getchar()) != EOF && ch != '\n');
  24. if( n > 0 ){
  25. printf( "\n Introduzca el NOMBRE del empleado.....:" );
  26. fgets( nombre, 80, stdin );
  27. printf( "\n Introduzca el SALARIO del empleado....:" );
  28. scanf( "%lf", &salario );
  29. while ((ch = getchar()) != EOF && ch != '\n');
  30.  
  31. fprintf( pArchivo, "%d\t%s\t%lf \n", orden, nombre, salario );
  32. }
  33. }while( n > 0 );
  34.  
  35. fclose( pArchivo );
  36. }else{
  37. printf( "\n Error al abrir %s para escritura/lectura. Finaliza el programa.", "pruebaE" );
  38. }
  39.  
  40.  
  41. return 0;
  42.  
  43. }
  44.  
  45. void limpiar( void ){
  46. system("cls||clear");
  47. }
  48.  


Desde ya muchas gracias, saludos.
« Última modificación: 6 Septiembre 2016, 18:51 pm por NOB2014 » En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Tutorial de archivos en lenguaje C. -
« Respuesta #17 en: 6 Septiembre 2016, 16:29 pm »

Es raro que te de ese error si es el mismo codigo que se uso no deberia de agregar ese enter de mas...

Sanitiza la entrada del nombre quitandole el \n o \r que quede atorado ahi:

Código
  1. char *busqueda = NULL;
  2. fgets( nombre, 80, stdin );
  3. busqueda = strstr(nombre,"\n");
  4. *busqueda = '\0';
  5.  
En línea

NOB2014


Desconectado Desconectado

Mensajes: 366



Ver Perfil
Re: Tutorial de archivos en lenguaje C. -
« Respuesta #18 en: 6 Septiembre 2016, 16:46 pm »

Hola, Alberto, buen día. -
No es el mismo código y cometí 2 veces el mismo error ,  fgets en casi todos los casos al final de la cadena pone el salto de línea y eso hacia que el último campo se escribiera mal en el archivo. -
Tengo otra consulta para hacerles, lo que ocurre es que tengo el programa para escribir y leer el archivo en distintas carpetas ¿alguien sabe cómo abrir archivo en Linux que estén en una carpeta distinta a la que se encuentraa el programa? -

Saludos.
En línea

abraza las cosas y personas malas como si fueran tu mas preciada joya,Son tus mas grandes maestros de paciencia sabiduría y amor y cuando lo abrazas dejan de causar dolor.-
AlbertoBSD
Programador y
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.705


🏴 Libertad!!!!!


Ver Perfil WWW
Re: Tutorial de archivos en lenguaje C. -
« Respuesta #19 en: 6 Septiembre 2016, 17:50 pm »

Hay varias formas para hacer esto.

Hay que usar la ruta absoluta o la ruta relativa.

Esto es con ruta absoluta:

Código
  1. archivo = fopen("/usr/home/usuario/directorioX/archivo.txt","r");

O con ruta relativa (relativa al directorio actual de trabajo), suponiendo que estemos ya en el directorio usuario y asumiendo que el directorioX exita:
Código
  1. archivo = fopen("./directorioX/archivo.txt","r");

Saludos!
En línea

Páginas: 1 [2] 3 4 Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines