sexta-feira, 2 de agosto de 2013

C... Structs, Malloc, open Files...


Apenas brincando com estruturas, peguei um arquivo de 1.000.000 de linhas e estou convertendo para um arquivo estruturado...

Como faz tempo que não, ainda fazendo algumas peripécias..

Estou apenas postando... uma parte do código para consultar depois...

Ah, estou fazendo apenas por diversão...




#include
#include
#include
#include
#include

int ConverteArquivo();


struct pessoa
{
char ID[8];
char CPF[13];
char nome[50];
char meio[10];
char sobrenome[50];
};


struct pessoa *StrToPessoa(char str[]){

struct pessoa *p;
p = (pessoa *) malloc(sizeof(struct pessoa));
if(p==NULL){
printf("[error] - Falha na alocacao de memoria!");
exit(1);
}

char * pch;

pch = strtok (str," ");
strcpy(p->ID,pch);
pch = strtok (NULL, " ");
strcpy(p->CPF,pch);
pch = strtok (NULL, " ");
strcpy(p->nome,pch);
pch = strtok (NULL, " ");
strcpy(p->meio,pch);
pch = strtok (NULL, " ");
strcpy(p->sobrenome,pch);
return p;
}




int main ()
{
clrscr();

ConverteArquivo();
char str2[] = "437665 237533290-80 Gustavo X. Noriler";
char str[] =  "437664 237565588-68 Gustavo N. Nogara";

struct pessoa *listaPessoa = (pessoa *) malloc(sizeof(struct pessoa)*10);
struct pessoa *inicioLista = listaPessoa;


struct pessoa *p;

p = StrToPessoa(str);
*listaPessoa = *p;
listaPessoa++;


p = StrToPessoa(str2);
*listaPessoa = *p;
listaPessoa++;



listaPessoa = inicioLista;


printf("\nID: %s",listaPessoa->ID);

listaPessoa++;
printf("\nID: %s",listaPessoa->ID);



free(p);
free(listaPessoa);

return 0;

}
int ConverteArquivo(){
FILE *fpOrigem;
FILE *fpDestino;

if((fpDestino=fopen("c:\\TEMP\\ListaDestino.txt","wb"))==NULL)
{

printf("\n [error] - O arquivo nao pode ser aberto");

}


if((fpOrigem=fopen("c:\\TEMP\\ListaOrigem.txt","rb")) == NULL){
printf("[error] - o arquivo de Origem pode ser aberto.\n");
return 0;
}

char str[100];
char buf[2];
strcpy(str,"\0");
char ch;
unsigned long count = 0;

while(!feof(fpOrigem)){

ch = getc(fpOrigem);
buf[0] = ch;
buf[1] = '\0';
strcat(str,buf);

if(ch=='\n')
{

// printf("\n%s",str);

struct pessoa *p= StrToPessoa(str);
clrscr();
printf("%ld - %s",count, str);
count++;


if(fwrite(p, sizeof(struct pessoa),1,fpDestino)!=1)
{
printf("[error] Falha ao gravar");
}
free(p);
strcpy(str,"\0");
}


}

//fseek(fp, posArq*sizeof(struct registro), SEEK_SET);
//fread(&info, sizeof(struct registro), 1, fp);

fclose(fpOrigem);
fclose(fpDestino);

return 1;

}

Postar um comentário