Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Quitar Todos Los Espacios, Tabs A Un Archivo

Estas en el tema de Quitar Todos Los Espacios, Tabs A Un Archivo en el foro de C/C++ en Foros del Web. COMO PUEDO HACER PARA QUITAR TODOS LOS ESPACIOS DE UN ARCHIVO, AL RECIBIRLO LINEA POR LINEA CON FGETS Y GUARDARLO EN OTRO ARCHIVO? A MI ...
  #1 (permalink)  
Antiguo 29/03/2008, 18:09
 
Fecha de Ingreso: marzo-2008
Mensajes: 17
Antigüedad: 16 años, 1 mes
Puntos: 0
Quitar Todos Los Espacios, Tabs A Un Archivo

COMO PUEDO HACER PARA QUITAR TODOS LOS ESPACIOS DE UN ARCHIVO, AL RECIBIRLO LINEA POR LINEA CON FGETS Y GUARDARLO EN OTRO ARCHIVO? A MI SE ME OCURRE ALGO COMO ESTO
LO MALO ES QUE EJECUTO ESTO EN LCC-WIN32 Y ME DA UN ERROR (o nose lo ke es):
lcc runtime
exeption 0xc00000005:
segment violation
addres:0x73d1be14


#include <stdio.h>
#define MAXLINE 1024
int main()
{
FILE *entrada, *salida;
char linea[MAXLINE];
int w=0,r=0;
entrada = fopen("entrada.c", "r");
salida = fopen("salida.c", "w");

while(entrada != EOF)
{
fgets(linea,MAXLINE,entrada);

while(linea[r] != '\0')
{
while(linea[r] == ' ' && linea[r+1] == ' ')
r++;
linea[w]=linea[r];
r++;
w++;
}


fputs(linea, salida);
}
fclose(entrada); fclose(salida);
}



por que no corre este programa?
  #2 (permalink)  
Antiguo 29/03/2008, 23:30
 
Fecha de Ingreso: marzo-2008
Mensajes: 22
Antigüedad: 16 años, 2 meses
Puntos: 1
Re: Quitar Todos Los Espacios, Tabs A Un Archivo

/*
Primero que nada cuando utilizes las funciones de archivo (u otras), deberas saber si el puntero que estas utilizando
es diferente a NULL, o sea que si utilizas alguna function y el parametro que pasas es NULL
va haber un ERROR (Access Vialotion).
Habia otros errores, que ya los corregi.
Ej, No iniciabas nR y nW con 0, cada vez que leías una nueva línea.
*/

// Reescribí el código(a mi me funciona, espero que sea esto lo que buscabas):

#include <stdio.h>
#include <conio.h>
#define MAXLINE 1024

int main(void)
{
FILE *pIn;
FILE *pOut;
long nR;
long nW;
char szLine[MAXLINE];

pIn = fopen("entrada.c", "r");
pOut = fopen("salida.c", "w");
if(pIn == NULL)
printf("No se pudo abrir el archivo de entrada\n");
if(pOut == NULL)
printf("No se pudo abrir el archivo de salida\n");

if(pIn != NULL && pOut != NULL) // Esto es muy importante
{
while(!feof(pIn)) // Continuar mientras haya caracters para leer
{
if(fgets(szLine, MAXLINE, pIn)) // Si tiene exito...
{
// nR y nW, siempre deber empezar con cero
nR = 0;
nW = 0;
while(szLine[nR] != '\0')
{
while(szLine[nR] == ' ' || szLine[nR] == '\t') // Avanzar nR mientras sea un espacio o un TAB
nR++;
szLine[nW++] = szLine[nR++]; // Copiar, y avanzar nR y nW
}
// Truncar la línea de salida (Es necesario)
szLine[nW] = '\0';

// Guardar línea
fputs(szLine, pOut);
}
}
}
printf("Fin...\n");
if(pIn) // Esto es muy importante
fclose(pIn);
if(pOut) // Esto es muy importante
fclose(pOut);
_getch();
return 0;
}

/*
Espero que haya quedado claro, sino abisa, e intentaré explicarlo mejor.
*/
/*
Recordá, el archivo de entrada debe existir.
*/
  #3 (permalink)  
Antiguo 30/03/2008, 11:50
 
Fecha de Ingreso: marzo-2008
Mensajes: 17
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Quitar Todos Los Espacios, Tabs A Un Archivo

muchas gracias germancho 7186 me quedo muy claro tu codigo me sirvio demasiado para entender muchas cosas que no sabia, ahora se me ase mas facil para ordenar el archivo con espacios y tabs oajala me resulte lo que quiero.
mi idea es sacar toso los espacios y tabs a un archivo para asi ordenarlo con sus espacios y tabs correspondiente
  #4 (permalink)  
Antiguo 30/03/2008, 17:18
 
Fecha de Ingreso: marzo-2008
Mensajes: 17
Antigüedad: 16 años, 1 mes
Puntos: 0
Re: Quitar Todos Los Espacios, Tabs A Un Archivo

lo que esta marcado con negro se lo inclui yo, supuestamente si encuentra un espacio un parentesis en la linea pone un espacio anyes y despues del parentesis sino copia tal cual la linea


#include <stdio.h>
#include <conio.h>
#define MAXLINE 1024

int main(void)
{
FILE *pIn;
FILE *pOut;
long nR;
long nW;
char szLine[MAXLINE],szLine2[MAXLINE];

pIn = fopen("entrada.c", "r");
pOut = fopen("salida.c", "w");
if(pIn == NULL)
printf("No se pudo abrir el archivo de entrada\n");
if(pOut == NULL)
printf("No se pudo abrir el archivo de salida\n");

if(pIn != NULL && pOut != NULL) // Esto es muy importante
{
while(!feof(pIn)) // Continuar mientras haya caracters para leer
{
if(fgets(szLine, MAXLINE, pIn)) // Si tiene exito...
{
// nR y nW, siempre deber empezar con cero
nR = 0;
nW = 0;
while(szLine[nR] != '\0')
{
while(szLine[nR] == ' ' || szLine[nR] == '\t') // Avanzar nR mientras sea un espacio o un TAB
nR++;
szLine[nW++] = szLine[nR++]; // Copiar, y avanzar nR y nW
}
// Truncar la línea de salida (Es necesario)
szLine[nW] = '\0';



// Guardar línea

}
}
}
int i=0;

while( szLine[i] != '\0'){
if(szLine[i] == ')'){
szLine2[i]='0';
szLine[i+1]=szLine[i];
szLine[i+2]='0';
}else{
szLine2[i]=szLine[i];}

fputs(szLine2, pOut);
}
printf("Fin...\n");
if(pIn) // Esto es muy importante
fclose(pIn);
if(pOut) // Esto es muy importante
fclose(pOut);
_getch();
return 0;
}

/*
Espero que haya quedado claro, sino abisa, e intentaré explicarlo mejor.
*/
/*
Recordá, el archivo de entrada debe existir.
*/
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:48.