Autor
|
Tema: Tutorial de archivos en lenguaje C. - (Leído 15,942 veces)
|
MCKSys Argentina
|
Creo que sera evidente que no soy experto en C/C++, pero no seria valido reemplazar esto: ... fprintf(fptr, "%s", recordatorio->nombre); fprintf(fptr, "%s", recordatorio->direccion); fprintf(fptr, "%s", recordatorio->ciudad); fprintf(fptr, "%s", recordatorio->correo); fprintf(fptr, "%s", recordatorio->telefono); fprintf(fptr, "%s", recordatorio->celular); fprintf(fptr, "%s", recordatorio->otros); ...
por algo como esto? ... fprintf(fptr, "%s,%s,%s,%s,%s,%s,%s", (recordatorio->nombre, recordatorio->direccion, recordatorio->ciudad, recordatorio->correo, recordatorio->telefono, recordatorio->celular, recordatorio->otros)); ...
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
Mensajes: 366
|
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
Mensajes: 366
|
Ya lo solucione, dejo el código por si a alguien le pasa algo parecido. - void reemplazar( Recordatorio *recordatorio ){ char *p=NULL; if((p =strchr(recordatorio ->nombre , '\n'))){ *p='|'; } if((p =strchr(recordatorio ->direccion , '\n'))){ *p='|'; } if((p =strchr(recordatorio ->ciudad , '\n'))){ *p='|'; } if((p =strchr(recordatorio ->correo , '\n'))){ *p='|'; } if((p =strchr(recordatorio ->telefono , '\n'))){ *p='|'; } if((p =strchr(recordatorio ->celular , '\n'))){ *p='|'; } if((p =strchr(recordatorio ->otros , '\n'))){ *p='|'; } }
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
Mensajes: 366
|
3 - Posicionarse en el último registro. Si tengo lo siguiente en el archivo. - 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
Mensajes: 3.705
🏴 Libertad!!!!!
|
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
Mensajes: 366
|
Hola. Al fin parece que lo conseguí. - Una consultita, hay otra manera para hacer lo mismo sin utilizar '\n'. - FILE *fptr = fopen( "fichero.txt", "r+" ); orden = cantCampos( fptr, orden ); int cantCampos( FILE *fptr, int orden ){ char caracter; while ( !feof ( fptr ) ){ if( caracter == '\n' ) orden++; } return orden; }
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
Mensajes: 366
|
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. #include <stdio.h> #include <stdlib.h> void limpiar( void ); int main( void ){ int n = 1, ch, orden=-1; char nombre[80], caracter; double salario; FILE *pArchivo = fopen( "pruebaE.txt", "a+" ); if( pArchivo != NULL ){ while ( !feof ( pArchivo ) ){ caracter = getc( pArchivo ); if( caracter == '\n' ) orden++; } do{ limpiar(); orden++; printf( "\n\n El proximo empleado es el numero..: %d", orden ); printf( "\n\n Introduzca 0 para finalizar mayor para continuar.....:" ); while ((ch = getchar()) != EOF && ch != '\n'); if( n > 0 ){ printf( "\n Introduzca el NOMBRE del empleado.....:" ); fgets( nombre , 80, stdin ); printf( "\n Introduzca el SALARIO del empleado....:" ); scanf( "%lf", &salario ); while ((ch = getchar()) != EOF && ch != '\n'); fprintf( pArchivo , "%d\t%s\t%lf \n", orden , nombre , salario ); } }while( n > 0 ); }else{ printf( "\n Error al abrir %s para escritura/lectura. Finaliza el programa.", "pruebaE" ); } return 0; } void limpiar( void ){ }
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
Mensajes: 3.705
🏴 Libertad!!!!!
|
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: char *busqueda = NULL; fgets( nombre , 80, stdin ); busqueda = strstr(nombre ,"\n");*busqueda = '\0';
|
|
|
En línea
|
|
|
|
NOB2014
Desconectado
Mensajes: 366
|
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
Mensajes: 3.705
🏴 Libertad!!!!!
|
Hay varias formas para hacer esto. Hay que usar la ruta absoluta o la ruta relativa. Esto es con ruta absoluta: 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: archivo = fopen("./directorioX/archivo.txt","r");
Saludos!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
[Tutorial] Protege tus archivos con contraseña en Windows, Linux, Mac, Solaris
« 1 2 »
Seguridad
|
usuario oculto
|
10
|
12,015
|
21 Octubre 2010, 23:27 pm
por usuario oculto
|
|
|
Ayuda en manejo de Archivos en Lenguaje C
Programación C/C++
|
theluigy13etv
|
3
|
3,853
|
9 Diciembre 2011, 01:28 am
por rir3760
|
|
|
Vídeo Tutorial Recuperar archivos eliminados
Software
|
motocros_elche
|
0
|
2,357
|
18 Enero 2012, 01:14 am
por motocros_elche
|
|
|
Como cifrar y ocultar nuestros archivos con truecrypt: tutorial para novatos
Seguridad
|
mbarosky
|
0
|
3,582
|
7 Marzo 2012, 00:13 am
por mbarosky
|
|
|
Archivos en Lenguaje C
Programación C/C++
|
Nachillo
|
4
|
2,508
|
15 Agosto 2015, 19:38 pm
por Nachillo
|
|