Autor
|
Tema: Eliminar lineas en Blanco de un TXT (Leído 10,118 veces)
|
Jupiter34
Desconectado
Mensajes: 24
|
Estuve leyendo, pero parece que no hay una función en C que me permita eliminar las lineas en blanco de un archivo de texto. He leído, que es necesario crear, un nuevo archivo para después renombrarlo.... Realice ese código, pero no logro dar con la tecla.... FILE *cfptr; char linea[10000]; int i, numLin=0; char *sep=";"; char *ptr; char *ptr_id; char *ptr_nom; //Borro lo que este! remove("E:\\dataout.txt"); //Reviso las Lineas if ((cfptr=fopen("E:\\categorias.txt","r"))==NULL){ printf("\n No se puede Abrir!"); }else{ FILE * temp = fopen( "E:\\dataout.txt", "wt"); while (fgets (&linea, 10000, cfptr)!=NULL){ //Si no hay mas Que leer, salgo del ciclo! if (i=fgetc(cfptr)==EOF){ break; }else{ ungetc(i,cfptr); numLin++; //Cuento de Chusma fputs(linea, temp); //Agrego la Linea, al Archivo Temporal! } } fclose(temp); } fclose(cfptr); system("PAUSE");
Te aclaro que categorias.txt esta formado; 0;Televisor 1;Radio 2;Microondas 3;Video Quiero levantarlo, y que quede asi... Hay veces, que puede venir por ej... 0;Televisor 1;Radio 2;Microondas 3;Video La idea, es ... que si tengo que levantar un archivo que tenga espacios en blancos, entre los registros, limpiarlo y dejarlo consistente! En lo que me puedan dar una mano, mil gracias! Como siempre!
|
|
|
En línea
|
|
|
|
xiruko
Desconectado
Mensajes: 438
|
vengo de estar leyendo un rato un codigo bastante denso y me da pereza leer el tuyo y encontrar donde falla... te dejo un codigo que funciona, es algo diferente al tuyo ya que yo por ejemplo leo caracter por caracter llevando la cuenta de los saltos de linea seguidos que se va encontrando, pero bueno te lo dejo por si te interesa mirartelo y sacar alguna idea. #include <stdio.h> int main(int argc, char** argv) { if (argc != 2) { printf("MODO DE USO: %s <archivo>\n", argv [0]); return 0; } FILE *f1 =fopen(argv [1], "r"); FILE *f2 =fopen("temp.txt", "w"); int bytesLeidos, contador=0; // contador dice el numero de '\n' seguidos que encuentra char aux; while (1) { bytesLeidos =fread(&aux , sizeof(char), 1, f1 ); if (bytesLeidos > 0) { contador= (aux=='\n') ? contador+1 : 0; // se escribe solo si el caracter es distinto de '\n' o si es el primer // '\n' que encuentra if (contador ==1 || aux !='\n') fwrite(&aux , sizeof(char), 1, f2 ); } else break; } printf("Proceso completado.\n"); return 0; }
xiruko:~$ cat archivo.txt 0;Televisor
1;Radio
2;Microondas 3;Video
4;Movil xiruko:~$ gcc texto.c -o texto xiruko:~$ ./texto archivo.txt Proceso completado. xiruko:~$ cat archivo.txt 0;Televisor 1;Radio 2;Microondas 3;Video 4;Movil xiruko:~$ un saludo!
|
|
|
En línea
|
|
|
|
Jupiter34
Desconectado
Mensajes: 24
|
No estoy tan ducho! Para leer codigo! Pero se agradece!!!
Voy a investigarlo!
Imagine que pensarlo de esa manera, era mas facil!
Seguire leyendo!
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Otra opción consiste en el uso de las funciones "fgetc" y "fputc" (prototipos en <stdio.h>), mas o menos así: int ch; int prev; /* ... */ prev = '\n'; while ((ch = fgetc(entrada )) != EOF ) if (prev != '\n' || ch != '\n'){ prev = ch; }
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
Jupiter34
Desconectado
Mensajes: 24
|
Gracias Muchachos! Con esta creo que vamos a andar bien!!! Mil gracias!
|
|
|
En línea
|
|
|
|
Jupiter34
Desconectado
Mensajes: 24
|
Algo estoy haciendo mal... //Grabo Categorias void grabaCategorias(nodocat *lista){
nodocat *puntero;
puntero=lista;
FILE *cfptr, *temp;
if ((cfptr=fopen("E:\\categorias.txt","w"))==NULL){ printf("\n No se puede Abrir!"); }else{ while(puntero!=NULL){ fprintf(cfptr,"%d;%s",puntero->id,puntero->nomCat); fprintf(cfptr,"\n"); puntero=puntero->sig; } //fclose(cfptr); printf("Se Han Grabado los Datos de Usuario Correctamente\n\n"); } if ((cfptr=fopen("E:\\temp.txt","w"))==NULL){ printf("\n No se puede Abrir!"); }else{ int ch; int prev; prev='\n'; while ((ch = fgetc(cfptr)) != EOF){ if (prev != '\n' || ch != '\n'){ fputc(ch, temp); prev = ch; } } } fclose(cfptr); fclose(temp); }
La idea, es que despues de grabar lea el archivo y elimine los reglones en blanco... No logro ingresar al while que va hasta el End Of File... La idea es limpiar, copiando a temp.txt para luego eliminar categorias.txt y reemplazando por temp.txt... Saludos
|
|
|
En línea
|
|
|
|
xiruko
Desconectado
Mensajes: 438
|
edito: perdonad me he confundido xD si alguien puede borrar el post lo agradeceria
|
|
|
En línea
|
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Problemas hay varios, el mas importante es el modo de apertura de los archivos: el archivo de entrada se debe abrir en el modo "rt" y el de salida en "wt". También se debe generar el mensaje de error de forma automática (mediante la función "perror") y utilizar nombres descriptivos para las variables. La función con las correcciones: void grabaCategorias(nodocat *p) { FILE *entrada; FILE *salida; if ((salida = fopen("E:\\temp.txt", "w")) == NULL ){ return; } while (p != NULL){ fprintf(salida , "%d;%s\n", p ->id , p ->nomCat ); p = p->sig; } if ((entrada = fopen("E:\\temp.txt", "r")) == NULL ) else if ((salida = fopen("E:\\categorias.txt", "w")) == NULL ){ }else { int ch; int prev; prev = '\n'; while ((ch = fgetc(entrada )) != EOF ) if (prev != '\n' || ch != '\n'){ prev = ch; } } }
Un saludo
|
|
|
En línea
|
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly. -- Kernighan & Ritchie, The C programming language
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Retocar firma + eliminar blanco
Diseño Gráfico
|
La Muertع Blancα
|
4
|
4,739
|
29 Mayo 2010, 10:52 am
por La Muertع Blancα
|
|
|
Dejar lineas en blanco hace mas pesado los programas???
Programación C/C++
|
Anastacio
|
2
|
2,305
|
21 Enero 2012, 02:52 am
por Anastacio
|
|
|
Eliminar lineas que no cumplan condición
Scripting
|
Afkael
|
4
|
3,203
|
2 Junio 2014, 16:28 pm
por Afkael
|
|
|
Eliminar lineas que no cumplan cierta condición
Scripting
|
Afkael
|
8
|
5,197
|
4 Febrero 2015, 22:19 pm
por explorer
|
|
|
MOVIDO: Eliminar Items en blanco
Programación General
|
Eleкtro
|
0
|
2,093
|
24 Marzo 2018, 22:02 pm
por Eleкtro
|
|