davide92 Posted June 3, 2012 at 03:04 PM Report #460004 Posted June 3, 2012 at 03:04 PM Boas a todos eu gostaria de saber como posso passar de um ficheiro binário que o programa criou ? Por exemplo passo isto: #include <stdio.h> #define maxFICHA_DE_FRUTAS 10000 typedef struct ficha_de_frutas //FUNCAO PARA QUALQUER FICHA DE FRUTAS { int id; char tipo[50]; char condicao[50]; } FICHA_DE_FRUTAS; FICHA_DE_FRUTAS ficha_de_frutas [maxFICHA_DE_FRUTAS]; para um ficheiro binário sempre que crio uma ficha com isto: FICHA_DE_FRUTAS ficha_frutas; ficha_frutas=ficha_de_frutas[i]; FILE * frutas; frutas = fopen("ficha_de_frutas.dat","a+"); fwrite(&ficha_frutas, 1, sizeof(ficha_de_frutas[i]),frutas); e agora gostaria de saber como posso abrir o ficheiro "ficha_de_componentes.dat" com "n" fichas criadas, de modo a que quando eu vá ver as fichas que tenho consiga ver tudo certinho assim: void mostrar_ficha_de_componentes(int i) { printf(" +-------------------------Ficha de Frutas(N:%d)----------------------+\n\n",ficha_de_Frutas[i].id); printf(" Identificacao:%d\n",ficha_de_frutas[i].id); printf(" Tipo:%s",ficha_de_frutas[i].tipo); printf(" Condicao:%s",ficha_de_frutas[i].condicao); printf(" \n"); printf(" +-------------------------Ficha de Frutas(N:%d)----------------------+\n\n",ficha_de_frutas[i].id); system("pause"); } Já andei a ver aqui https://wiki.portugal-a-programar.pt/dev_geral/c/ficheiros/ mas fiquei mal esclarecido :s
pikax Posted June 3, 2012 at 03:09 PM Report #460006 Posted June 3, 2012 at 03:09 PM ve se isto te ajuda http://www.codingunit.com/c-tutorial-binary-file-io Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
davide92 Posted June 3, 2012 at 03:18 PM Author Report #460010 Posted June 3, 2012 at 03:18 PM Será qualquer coisa deste género ? FILE * frutas; frutas = fopen("ficha_de_frutas.dat","r"); fread(&ficha_frutas, 1, sizeof(ficha_de_frutas[i]),frutas); ficha_frutas=ficha_de_frutas[i]; FICHA_DE_FRUTAS ficha_frutas;
pikax Posted June 3, 2012 at 03:25 PM Report #460011 Posted June 3, 2012 at 03:25 PM (edited) o teu fread esta' mal size_t fread ( void * ptr, size_t size, size_t count, FILE * stream ); seria mehor fazer um dump da array para o ficheiro e depois fazer dump do ficheiro para a memoria. fread(&fichas_de_frutas,sizeof(fichas_de_frutas),sizeof(fichas_de_frutas)/sizeof(FICHA_DE_FRUTAS),frutas); Edited June 3, 2012 at 03:34 PM by pikax Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
davide92 Posted June 3, 2012 at 03:32 PM Author Report #460015 Posted June 3, 2012 at 03:32 PM Pois ai está eu já passei para o ficheiro, agora quero passar para a memoria e está a ser um quebra-cabeças :s
davide92 Posted June 3, 2012 at 03:49 PM Author Report #460019 Posted June 3, 2012 at 03:49 PM o teu fread esta' mal size_t fread ( void * ptr, size_t size, size_t count, FILE * stream ); seria mehor fazer um dump da array para o ficheiro e depois fazer dump do ficheiro para a memoria. fread(&fichas_de_frutas,sizeof(fichas_de_frutas),sizeof(fichas_de_frutas)/sizeof(FICHA_DE_FRUTAS),frutas); Com este código irei fazer acontecer o que propriamente ? Onde o irei pôr ?
pikax Posted June 3, 2012 at 04:30 PM Report #460027 Posted June 3, 2012 at 04:30 PM ve se percebes o codigo: /* fgets example */ #include <stdio.h> #include <string.h> #define maxFICHA_DE_FRUTAS 10000 typedef struct fichadefrutas //FUNCAO PARA QUALQUER FICHA DE FRUTAS { int id; char tipo[50]; char condicao[50]; } FICHA_DE_FRUTAS; FICHA_DE_FRUTAS ficha_de_frutas [maxFICHA_DE_FRUTAS]; void populate() { FICHA_DE_FRUTAS* temp=&ficha_de_frutas[888]; temp->id=666; strcpy(temp->condicao,"alguma condicao"); strcpy(temp->tipo,"algum tipo"); } void mostrar_ficha_de_componentes(int i) { static int as=0; printf(" +-------------------------Ficha de Frutas(N:%d)----------------------+\n\n",ficha_de_frutas[i].id); printf(" Identificacao:%d\n",ficha_de_frutas[i].id); printf(" Tipo:%s",ficha_de_frutas[i].tipo); printf(" Condicao:%s",ficha_de_frutas[i].condicao); printf(" \n"); printf(" +-------------------------Ficha de Frutas(N:%d)----------------------+\n\n",as); //system("pause"); as++; } int main() { FILE * pFile; char mystring[100]; pFile = fopen ("a.bin" , "w"); if (pFile == NULL) printf("Error opening file"); populate(); mostrar_ficha_de_componentes(888); printf("gravado %d elements",fwrite(ficha_de_frutas,sizeof(ficha_de_frutas[0]),maxFICHA_DE_FRUTAS,pFile)); fclose (pFile); //apagar a array, para ter certeza que os dados que serao lidos do ficheiro sao verdadeiros memset(ficha_de_frutas,0,maxFICHA_DE_FRUTAS*sizeof(FICHA_DE_FRUTAS)); mostrar_ficha_de_componentes(888); pFile = fopen ("a.bin" , "rb"); fread(ficha_de_frutas,sizeof(ficha_de_frutas[0]),maxFICHA_DE_FRUTAS,pFile); mostrar_ficha_de_componentes(888); fclose(pFile); return 0; } esta a funcionar, ve se te ajuda Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
davide92 Posted June 5, 2012 at 06:03 PM Author Report #460634 Posted June 5, 2012 at 06:03 PM EIsh andei a tentar ver como era e ainda não consegui perceber muito bem, posso-te enviar por pm o código e tu veres o que está mal se faz favor ?
pikax Posted June 5, 2012 at 06:06 PM Report #460636 Posted June 5, 2012 at 06:06 PM envia aqui no topico, porque assim, toda a gente consegue ver o problema e ajudar Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
HappyHippyHippo Posted June 5, 2012 at 06:24 PM Report #460655 Posted June 5, 2012 at 06:24 PM (edited) onde está o problema ??? typedef struct { .... } MyStruct; int main(void) { FILE * file = NULL; MyStruct dados; // abrir o ficheiro para escrita .... fwrite(&dados, // posição de memória onde se encontra os dados a serem escrito no ficheiro sizeof(MyStruct), // número de bytes de cada elemento a ser escrito 1, // número de elementos a serem escritos file); // ponteiro para o ficheiro // fechar o ficheiro ... // abrir o ficheiro para leitura ... fread(&dados, // posição de memória onde se irá guardar os bytes lidos sizeof(MyStruct), // número de bytes de cada elemento a ser lido 1, // número de elementos a serem lidos file); // ponteiro para o ficheiro // fechar o ficheiro ... } Edited June 5, 2012 at 06:25 PM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus
davide92 Posted June 5, 2012 at 08:46 PM Author Report #460694 Posted June 5, 2012 at 08:46 PM (edited) Esse programa está a correr, eu é que não percebi muito bem. Mas pronto irei pôr o fread na main, antes do menu principal ? Do genero int main (bla bla) { FILE*pfle; pfile=open("ficha_frutas.dat","rb"); fread(ficha_de_frutas,sizeof(ficha_de_frutas[0]),maxFICHA_DE_FRUTAS,pFile); ... menu ... } Edited June 5, 2012 at 08:48 PM by davide92
pikax Posted June 5, 2012 at 08:50 PM Report #460695 Posted June 5, 2012 at 08:50 PM nao seria melhor teres uma opcao para fazer load? Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
davide92 Posted June 5, 2012 at 08:52 PM Author Report #460697 Posted June 5, 2012 at 08:52 PM nao seria melhor teres uma opcao para fazer load? Como assim load ?
pikax Posted June 5, 2012 at 08:55 PM Report #460698 Posted June 5, 2012 at 08:55 PM Como assim load ? falei em load no sentido de fazer o dump do ficheiro para a memoria Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
davide92 Posted June 5, 2012 at 08:59 PM Author Report #460701 Posted June 5, 2012 at 08:59 PM E o dump irá tratar-se exactamente do que ? PS: Desculpa a minha burrice em c.
pikax Posted June 5, 2012 at 09:02 PM Report #460702 Posted June 5, 2012 at 09:02 PM (edited) nunca jogaste um jogo em que aparece um ecra(antes de jogares) que diz "loading"? load e' carregar dados, so' que estavame a faltar a palavra em portugues 😛 podes fazer o load no inicio ou ter uma opcao que deixe o utilizador fazer o load. EDIT: Corrijam-me se eu estiver enganado, "dump" significa guardar os dados da aplicacao(memoria) para algum local que pode ser um ficheiro. Edited June 5, 2012 at 09:04 PM by pikax Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
davide92 Posted June 5, 2012 at 09:03 PM Author Report #460703 Posted June 5, 2012 at 09:03 PM Era optimo carregar os dados todos logo ao inicio! Na boa 😉
pikax Posted June 5, 2012 at 09:04 PM Report #460704 Posted June 5, 2012 at 09:04 PM entao mete o codigo logo no inicio LOL Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
davide92 Posted June 5, 2012 at 09:07 PM Author Report #460706 Posted June 5, 2012 at 09:07 PM LOL meto assim ? int main (void) { FILE*pFile; pFile=fopen("ficha_de_componentes.bin","rb"); if((pFile=fopen("ficha_de_componentes.bin","rb"))==NULL) { puts("\n" "\n" "\n" "\nImpossivel abrir o ficheiro pretendido!" "\n" "\n" "\n"); puts("AVISO!!!" "\n" "\nNAO SERA CARREGADO NENHUM FICHEIRO!" "\n" "\n"); system("PAUSE"); system("cls"); } else { puts("\n" "\n" "\n" "\nFICHEIRO CARREGADO COM SUCESSO!" "\n" "\n" "\n"); } fread(ficha_de_componentes,sizeof(ficha_de_componentes[0]),maxFICHA_DE_COMPONENTES,pFile); ... menu ... }
pikax Posted June 5, 2012 at 09:09 PM Report #460708 Posted June 5, 2012 at 09:09 PM tantos '\n', so deves fazer fread se o ficheiro for aberto Por muito mais que que estude só aprendo uma coisa, que ainda tenho muita coisa para aprender. A beleza de um código está em decompor problemas complexos em pequenos blocos simples. "learn how to do it manually first, then use the wizzy tool to save time." "Kill the baby, don't be afraid of starting all over again. Fail soon, learn fast."
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now