Ver Mensaje Individual
  #5 (permalink)  
Antiguo 08/06/2005, 03:32
Neptuno
 
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.