
08/06/2005, 03:32
|
| | Fecha de Ingreso: marzo-2005
Mensajes: 33
Antigüedad: 19 años, 10 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. |