Autor
|
Tema: sustiyuir el salto de linea por coma (Leído 5,203 veces)
|
minette1988
Desconectado
Mensajes: 53
|
Hola, tengo un fichero binario con varios registros, lo que quiero es sustituir el salto de linea que separa a cada registro por una coma, para así a la hora de imprimirlos me saga cada registro separado por una coma. Primero se trata de abrir el fichero binario en lectura ir leyendo caracter a caracter y en cuanto encuentra el salto de linea sustituirlo por la coma y cuando llegue al final cerrar el fichero. Yo he empezado haciendo esto, pero me da error de lectura. #include <stdio.h> int main(){ char nom_fich[50]; char caracter; FILE *pf; printf("Introduzca nombre del fichero: "); if((pf = fopen("datos.dat", "rb")) == NULL ) { printf("Error al abrir el fichero.\n"); } else{ while(caracter != EOF){ } printf("Error de lectura.\n"); } } return(0); }
|
|
|
En línea
|
|
|
|
Zzombi
|
emm y si le pones un poquito de C++ ? y usas el método replace
|
|
|
En línea
|
|
|
|
shug0
Desconectado
Mensajes: 185
si puede hacerse debe hacerse
|
pregunta, el fichero que intentas leer es el correcto "datos.dat" (si esta en el mismo directorio y demas)? luego lees un nombre de fichero pero no lo utilizas "nom_fich[50]"
|
|
|
En línea
|
|
|
|
minette1988
Desconectado
Mensajes: 53
|
He intentado hacerlo de otra manera y si que lee caracter a caracter el fichero "datos.dat", este es el programa: #include <stdio.h> int main() { FILE *pf; char letra; // Abro el fichero pf = fopen("datos.dat","rb"); // Si ha dado fallado termino if ( pf == NULL ) { printf("Error al abrir el fichero."); return 1; } else{ while ( !feof(pf ) ) // Mientras no sea final de fichero { printf("%c",letra ); // Muestra el caracter leido } // Cerrar fichero return 0; } }
Ahora cómo hago para decirle que cuando encuentre un salto de linea me lo sustituya por una coma porque no tengo mucha idea.
|
|
|
En línea
|
|
|
|
shug0
Desconectado
Mensajes: 185
si puede hacerse debe hacerse
|
ya que lo estas leyendo en binario podrias compararlo con el codigo ascii de salto de linea y en caso de ser dicho caracter hacer una sustitucion, pero tambien puedes usar como comentaron C++ con replace que seria mas comodo.
|
|
|
En línea
|
|
|
|
nicolas_cof
Desconectado
Mensajes: 348
Into the Wild
|
Aca te dejo un codigo, para que mas o menos te des una idea de como puedes implementar algo... #include <stdio.h>
int main( void ) { FILE *f; char letra;
f = fopen( "datos.dat", "rb" ); if ( f == NULL ) { puts( "ERROR: No se pudo abrir el fichero" ); return -1; }
letra = getc( f ); while ( !feof( f ) ) { if ( letra == 10 ) // 10 = salto de linea (ASCII) letra = ','; printf( "%c", letra ); letra = getc( f ); } putchar( '\n' );
fclose( f );
return 0; } Salu10.
|
|
|
En línea
|
|
|
|
minette1988
Desconectado
Mensajes: 53
|
He aplicado este ejercicio a un programa que da de alta clientes, pero cuando pido mostrar el fichero no sale la coma para separar los registro. #include <stdio.h> #include <stdlib.h> #include <string.h> #define LEE_CHAR(c)\ c=getchar();\ while((c=='\n') || (c==' ') || (c=='\t'))\ c=getchar(); #define LEE_CAD(c,n) { int i=0; \ c[i]=getchar();\ while((c[i]=='\n') || (c[i]=='\t')) c[i]=getchar();\ while ((c[i]!='\n') && (i < (n-1))){ \ i++;\ c[i]=getchar(); }\ c[i]='\0'; } #define TAM_NOMBRE 100 #define TAM_DIR 100 struct cliente{ char nombre[TAM_NOMBRE]; char direccion[TAM_DIR]; double deuda; }; int main(){ void crear_fich(); int cambiar_salto_por_coma(); void mostrar_fich(); char op; FILE *pf; //Puntero a fichero /* Abre el fichero para trabajar con él en Lectura / Escritura */ if((pf = fopen("datos.dat", "wb+")) == NULL ) { /* Si no existe, ejecuta el módulo que lo cree */ crear_fich(); /* Una vez creado lo habre en lectura/escritura */ if((pf = fopen("datos.dat", "rb+")) == NULL ) { perror("Fichero no accesible"); } } do{ printf("1). Crear fichero.\n"); printf("2). Cambiar salto de linea por coma.\n"); printf("3). Mostrar fichero.\n"); printf("0). Salir\n\nOpción(0-3): "); do{ LEE_CHAR(op); }while( (op <'0') || (op >'3') ); switch(op){ case '1': crear_fich(pf); /* Una vez creado lo abre en lectura/escritura */ if((pf = fopen("datos.dat", "rb+")) == NULL ) { perror("Fichero no accesible"); } break; case '2': cambiar_salto_por_coma(pf); break; case '3': mostrar_fich(pf); break; } //switch }while(op!='0'); printf("Error al cerrar el fichero.\n"); }//main() //////////////////////////////////////////////////////////////////////// void crear_fich(FILE* pf) { struct cliente cli; char otro; if((pf = fopen("datos.dat", "wb")) == NULL ) { perror("Al crear el fichero de datos"); } /* Lectura de los ciclistas */ do { cli.deuda = 0.0; printf("Nombre: "); LEE_CAD (cli. nombre, TAM_NOMBRE ); printf("Dirección: "); LEE_CAD (cli. direccion, TAM_DIR ); /*Escribe el cliente en el fichero */ fwrite(&cli , sizeof(struct cliente ), 1, pf ); LEE_CHAR(otro); }while((otro=='s') || (otro=='S')); printf("Error al cerrar el fichero, compruebe si hay información.\n"); } } /* crear_fich()*/ /////////////////////////////// int cambiar_salto_por_coma(FILE *pf){ char letra; // Abro el fichero if((pf =fopen("datos.dat","rb+"))==NULL ){ printf("Error al abrir el fichero.\n"); return 1; } else{ while ( !feof(pf ) ){ // Mientras no sea final de fichero if(letra=='\n'){ letra=','; } } // Cerrar fichero return 0; } } ////////////////////////////////// void mostrar_fich(FILE *pf){ char letra; struct cliente cli; fread(&cli ,sizeof(struct cliente ),1,pf ); printf("%s %s %.2lf\t\n\n",cli. nombre,cli. direccion,cli. deuda); fread(&cli ,sizeof(struct cliente ),1,pf ); } }
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Salto de línea (fasm16) y algo mas je
ASM
|
S3kh
|
5
|
6,648
|
24 Agosto 2011, 23:51 pm
por S3kh
|
|
|
Problema con nextLine(), como evitar salto de linea
Java
|
razler
|
5
|
21,457
|
1 Septiembre 2011, 05:22 am
por razler
|
|
|
Codigo para el salto de linea en BATCH
Scripting
|
Meine programmen
|
3
|
31,116
|
3 Enero 2012, 05:14 am
por Eleкtro
|
|
|
salto de Linea en un JtextPane
Programación General
|
System23
|
0
|
4,415
|
26 Marzo 2012, 19:23 pm
por System23
|
|
|
coma en division en c
Programación C/C++
|
lucas59
|
1
|
2,184
|
1 Octubre 2014, 07:59 am
por BlackM4ster
|
|