Foros del Web » Programación para mayores de 30 ;) » Programación General »

leer de un fichero y guardar en otro

Estas en el tema de leer de un fichero y guardar en otro en el foro de Programación General en Foros del Web. Hola Amigos, estoy intentando ller de un fichero y almacenar los datos en un estructura y luego obtener los datos de la estructura pra gurdarlo ...
  #1 (permalink)  
Antiguo 07/06/2005, 02:53
 
Fecha de Ingreso: marzo-2005
Mensajes: 33
Antigüedad: 19 años, 8 meses
Puntos: 0
leer de un fichero y guardar en otro

Hola Amigos, estoy intentando ller de un fichero y almacenar los datos en un estructura y luego obtener los datos de la estructura pra gurdarlo en otro fichero distinto.
El problema que es que siempre me escribe la misma linea en el fichero que quiero generar.
El códgio que utilizo es:


void TreatLodFile::ReadLodFile()
{
int pt, i, j;
unsigned int Vertex0, Vertex1, modVertex;
unsigned int n0, n1, n2, Triangulo0, Triangulo1;
FILE *fp;
char fileLOD[80], buff[80];

Step aux;

//pt=sprintf(fileLOD,"..\\media\\models\\bunny.lod") ; //%s.lod",Models[gMesh]);
pt=sprintf(fileLOD,"./bunny.txt"); //%s.lod",Models[gMesh]);
fp = fopen(fileLOD, "r");
printf("\n cadena %s\n", fileLOD);
system("pause");

if( fp == NULL)
{
printf("\nError: No se ha podido abrir el fichero correctamente\n");
system("pause");
exit(1);
}

j = 2;
while(!feof(fp))
{

fgets(buff, 80, fp);
printf("\nLA CADENA ES: %s\n", buff);

if( *buff == 'v' && *(buff+1) == '%')
{
sscanf(buff+j,"%u%u%u%u%u%u%u", &Vertex0, &Vertex1, &n0, &n1, &n2, &Triangulo0, &Triangulo1);
aux.mV0 = Vertex0;
aux.mV1 = Vertex1;
aux.mT0 = Triangulo0;
aux.mT1 = Triangulo1;

printf("\nvertice0 -> %u \nvertice1 -> %u\ntrinagulo0 -> %u\ntriangulo1 -> %u",aux.mV0,aux.mV1,aux.mT0,aux.mT1);

//j+=6;
//sscanf(buff+j,"%u%u", &Triangulo0, &Triangulo1);
//aux.mT0 = Triangulo0;
//aux.mT1 = Triangulo1;
//printf("\nTriangulo0 -> %u \nTriangulo1 -> %u\n",aux.mT0,aux.mT1);


j++;
while(*(buff+j) != '&') j++;
j++;

while (*(buff+j) != NULL)
{
if(*(buff+j)!='\r')
{
sscanf((buff+j), "%u", &modVertex);
printf("\nmodVertex -> %u\n", modVertex);
aux.mModfaces.push_back(modVertex);
j=j+2;
}
//else
// j++;
}

} //fin if v%

this->LodInfo.push_back(aux);

*buff = NULL;
} //fin while feof

}


void TreatLodFile::CreateFile()
{

int i,k;
FILE *newFile;

Step aux;

//newFile = fopen("..\\media\\models\\archivoPrueba.txt", "w");
newFile = fopen("./archivoPrueba.txt", "a");

for (i=0;i<this->LodInfo.size();i++)
{
aux.mV0 = this->LodInfo[i].mV0;
aux.mV1 = this->LodInfo[i].mV1;
aux.mT0 = this->LodInfo[i].mT0;
aux.mT1 = this->LodInfo[i].mT1;

fprintf(newFile, "%u %u %u %u & ", aux.mV0, aux.mV1, aux.mT0, aux.mT1);
for(k=0;k<this->LodInfo[i].mModfaces.size();k++)
{
//aux.mModfaces.push_back(this->LodInfo[i].mModfaces[k]);
fprintf(newFile,"%u ", this->LodInfo[i].mModfaces[k]);
}

fprintf(newFile, "\n");
}


fclose(newFile);

}


El archivo del cual lee tiene la siguiente informacion:

v% 44 55 88 66 54 21 45 & 12 47 41
v% 23 45 22 33 09 12 35 & 98 74 43

me guarda en el archivo que genero lo siguiente:

44 55 21 45 & 12 2 47 41 1
44 55 21 45 & 12 2 47 41 1 1 1 1
44 55 21 45 & 12 2 47 41 1 1 1 1

Alguien sabe xq siempre me guarda la misma linea y los 1s de mas?????

Gracias de antemano
  #2 (permalink)  
Antiguo 07/06/2005, 06:23
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 7 meses
Puntos: 17
¿Te crees que alguien se va a leer todo eso?

1 - Pon 2 - Coloca tabuladores o espacios
3 - Especifica todas las estructuras y llamadas
4 - Usa nombres que sean entendibles para los demás, no sólo para tu proyecto

  #3 (permalink)  
Antiguo 07/06/2005, 07:57
Avatar de Instru  
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años
Puntos: 52
Jejeje, estaba leyendo tu codigo y si esta algo pesado.
Intenta ponerlo con etiquetas QUOTE para que sea mas entendible.
Creo sabewr tu problema pero no estoy segurop, es demasiado codigo.

Saludos
  #4 (permalink)  
Antiguo 07/06/2005, 10:25
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 7 meses
Puntos: 17
Cita:
Iniciado por Instru
Jejeje, estaba leyendo tu codigo y si esta algo pesado.
Intenta ponerlo con etiquetas QUOTE para que sea mas entendible.
Creo sabewr tu problema pero no estoy segurop, es demasiado codigo.

Saludos
QUOTE no, CODE...

Y aparte, no se puede leer porque la mitad de las cosas no se sabe que son (estructuras, arrays, punteros this, etc).
  #5 (permalink)  
Antiguo 08/06/2005, 03:32
 
Fecha de Ingreso: marzo-2005
Mensajes: 33
Antigüedad: 19 años, 8 meses
Puntos: 0
Las estructuras son:

typedef unsigned int Index;
typedef struct
{
Index mV0, mV1; //aqui guardo los dos num primero de la linea
Index mT0, mT1; //aqui, los dos num antes del caracter &
std::vector<Index> mModfaces; //en este vector los num a partir de &
}Step;

typedef std::vector<Step> mSteps;


void ReadLodFile()
{
int pt, i, j;
unsigned int Vertex0, Vertex1, modVertex;
unsigned int n0, n1, n2, Triangulo0, Triangulo1;
FILE *fp;
char fileLOD[80], buff[80], buff2[80], *ptr;

Step aux;


pt=sprintf(fileLOD,"./bunny.txt");

//Abro el fichero
fp = fopen(fileLOD, "r");


if( fp == NULL)
{
printf("\nError: No se ha podido abrir el fichero correctamente\n");
system("pause");
exit(1);
}

j = 2;
while(!feof(fp))
{

// Leo laslienas del fichero en buff
fgets(buff, 80, fp);

strcpy(buff2,buff);

ptr = strtok(buff2, "&");

if( *buff2 == 'v' && *(buff2+1) == '%')
{

//Leo los primero 5 num de la linea y lo almaceno en aux
sscanf(buff2+j,"%u%u%u%u%u%u%u", &Vertex0, &Vertex1, &n0, &n1, &n2, &Triangulo0, &Triangulo1);
aux.mV0 = Vertex0;
aux.mV1 = Vertex1;
aux.mT0 = Triangulo0;
aux.mT1 = Triangulo1;

//busco el caracter & para continuar a partir de este punto
i=0;
while(*(buff+i) != '&')i++;
i++;

//separo por espacios los tokens
ptr = strtok((buff+i), " ");

//convierto las palabras a enteros y los almaceno en
//el vector aux.mModfaces
aux.mModfaces.clear();
while(ptr!=NULL)
{
modVertex = atoi(ptr);
aux.mModfaces.push_back(modVertex);
printf("\nptr es %s", ptr);
ptr=strtok(NULL," ");
}

} //fin if v%

this->LodInfo.push_back(aux);

} //fin while feof

}


void CreateFile()
{

int i,k;
FILE *newFile;

Step aux;

//creo un archivo en modo escritura
newFile = fopen("./archivoPrueba.txt", "w");

//genero lineas similares a las del primer fichero en este nuevo
for (i=0;i<this->LodInfo.size();i++)
{
aux.mV0 = this->LodInfo[i].mV0;
aux.mV1 = this->LodInfo[i].mV1;
aux.mT0 = this->LodInfo[i].mT0;
aux.mT1 = this->LodInfo[i].mT1;

fprintf(newFile, "%u %u %u %u & ", aux.mV0, aux.mV1, aux.mT0, aux.mT1);


for(k=0;k<this->LodInfo[i].mModfaces.size();k++)
{
fprintf(newFile,"%u ", this->LodInfo[i].mModfaces[k]);
}

fprintf(newFile, "\n");
}


fclose(newFile);

}

void main()
{
ReadLodFile();
CreateFile();
system("pause");
}


Siento que sea tan ilegible, lo he modificado un poco, xo todavia sigue de funcionar correctamente. A ver si de esta forma esta mas claro, sino gracias de todas formas por atenderme.
  #6 (permalink)  
Antiguo 08/06/2005, 06:12
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 7 meses
Puntos: 17
¿Tú lees lo que te escribimos? Usa las etiquetas, marca bien las secciones, usa espacios o tabuladores para indentar, pon que signfica cada cosa, etc.
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 23:14.