Su_Suh Postado Abril 12, 2010 Denunciar Share Postado Abril 12, 2010 (editado) Ola Pessoal!Preciso com muita urgencia, e não sei mais a quem recorrer, de ajuda se alguém souber ou tiver um exemplo de um programa em C sobre arquivo sequencial indexadoahh e não pode ter vetor apenas em arquivopor favor galera não sei mais onde procurar, não tem nenhum exemplodesde já obrigadoaguardo a ajuda de voces. :) Editado Abril 13, 2010 por quintelab Removido Ajuda-URGENTE do Título Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 p4t0X Postado Abril 13, 2010 Denunciar Share Postado Abril 13, 2010 Boa noite!O que você precisa fazer?! Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Su_Suh Postado Abril 13, 2010 Autor Denunciar Share Postado Abril 13, 2010 Boa noite!O que você precisa fazer?!Preciso fazer um algoritmo em C com arquivos sequenciais indexados, que faça busca, inserção e alteraçãotudo isso pelo indice do arquivomas não podemos usar vetor e nem buscar na memoriaapenas em arquivotipo são 3 arquivos principaiso de busca que, por exemplo pega o indice e ordena pelo codigo do aluno, que sejao principal, mestre, onde fica as informação apos as alterações...e o temporario, onde eu vou dizer quem eu vou inserir,alterar ou excluir...cara não sabemos mais o que fazerta complicado o negociopor favor alguém ajudeeeee :unsure: Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 p4t0X Postado Abril 13, 2010 Denunciar Share Postado Abril 13, 2010 Bom dia,Beleza, vou tentar fazer um esboço aqui pra tentar ajudar =) Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Su_Suh Postado Abril 13, 2010 Autor Denunciar Share Postado Abril 13, 2010 fico no aguardo então...desde já muiiito obrigado Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 p4t0X Postado Abril 13, 2010 Denunciar Share Postado Abril 13, 2010 (editado) Opa, eu não consegui fazer muita coisa hj, vo posta aqui só pra ter como eu continuar em casa!Mas pode dar uma idéia pra vocês!#include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct s_aluno { int codigo; char nome[30]; float media; }Aluno; typedef struct s_pesquisa_aluno { int codigo; long posicao; }AlunoPesquisa; void inserirAluno( Aluno *aluno , char *tmpfile ); Aluno *pesquisarAluno( int codigo , char *datafile , char *keyfile ); void mergeFiles( char *datafile , char *keyFile , char *tmpFile ); void inserirAluno( Aluno *aaa , char *tmpfile ){ FILE *fp; Aluno aux; long pos = 0; if( NULL != ( fp = fopen( tmpfile, "rb+" ) ) ){ //Procura pela posição a ser inserida no arquivo temporario fseek( fp , 0 , SEEK_SET );//Inicio do arquivo while( !feof( fp ) ){ fread( &aux , sizeof( Aluno ) , 1 , fp ); /* if( aux.codigo < aaa->codigo ){ printf( "CODIGO: %d\n" , aux.codigo ); continue; }else { break; } */ if( !feof( fp ) ){ if( aux.codigo < aaa->codigo ){ continue; }else { //fseek( fp , - sizeof( Aluno ) , SEEK_CUR ); break; } } } if( !feof( fp ) ){ printf( "Antes: %ld Elemento: %d" , ftell(fp), aaa->codigo ); fseek( fp , - sizeof( Aluno ) , SEEK_CUR ); printf( "Depois: %ld\n" , ftell(fp) ); } //printf( "Codigo Inserido: %d" , aaa->codigo ); printf( "Pos: %ld\n" , ftell( fp ) ); //fseek( fp , pos , SEEK_SET ); fwrite( aaa , sizeof( Aluno ) , 1 , fp ); }else { printf( "Impossivel abrir o arquivo temporario: %s\n" , tmpfile ); } fclose( fp ); } Aluno *pesquisarAluno( int codigo , char *datafile , char *keyfile ){ FILE *infos, *key; AlunoPesquisa posicao; Aluno *result; key = fopen( keyfile , "rb" ); while( !feof( key ) ){ fread( &posicao , sizeof( AlunoPesquisa ) , 1 , key ); if( !feof( key ) ){ if( posicao.codigo == codigo ){ //Aloca memoria para o registro result = (Aluno *) malloc( sizeof( Aluno ) );//@todo Verificar se conseguiu //Abre o arquivo de dados e coloca na posição encontrada, lê o registro para a estrutura infos = fopen( datafile , "rb" ); fseek( infos, posicao.posicao , SEEK_SET ); fread( result , sizeof( Aluno ) , 1 , infos ); fclose( infos ); fclose( key ); //Retorna a estrutura return result; } } } fclose( key ); return NULL; } void mergeFiles( char *datafile , char *keyFile , char *tmpFile ){ FILE *infos, *key, *tmp; Aluno aluno; AlunoPesquisa posicao; AlunoPesquisa aux; long pos = 0; infos = fopen( datafile , "ab+" ); tmp = fopen( tmpFile , "rb" ); key = fopen( keyFile , "ab" ); //Poderia fazer aqui uma procura pra a ver se já existe o codigo a ser inserido, eu nem //vou fazer fseek( key, 0 , SEEK_SET ); while( !feof( tmp ) ){ //Lê a linha atual do arquivo temporário fread( &aluno , sizeof( Aluno ) , 1 , tmp ); if( !feof( tmp ) ){//Verifica se não chegou no final do arquivo //Adiciona no arquivo de key pos = ftell( key ); while( !feof( key ) ){ fread( &aux , sizeof( AlunoPesquisa ) , 1 , key ); if( !feof( key ) ){ if( aluno.codigo > aux.codigo ){ continue; }else { pos = aux.posicao; } } } posicao.codigo = aluno.codigo; posicao.posicao = ftell( infos ); fwrite( &posicao , sizeof( AlunoPesquisa ) , 1 , key ); //Adiciona no arquivo de dados fwrite( &aluno , sizeof( Aluno ) , 1 , infos ); } } fclose( infos ); fclose( tmp ); fclose( key ); //Remove o temp remove( tmpFile ); } int main( int argc, char **argv ){ Aluno teste; Aluno *teste_pesquisa; FILE *t; t = fopen( "teste.txt" , "wb" ); fclose( t ); teste.codigo = 5; teste.media = 10; strcpy( teste.nome , "Diego" ); inserirAluno( &teste , "teste.txt" );//Coloca para inserir teste.codigo = 2; teste.media = 5; strcpy( teste.nome , "Asdwqe" ); inserirAluno( &teste , "teste.txt" );//Coloca para inserir /* teste.codigo = 3; teste.media = 6; strcpy( teste.nome , "JUAN" ); inserirAluno( &teste , "teste.txt" );//Coloca para inserir */ //mergeFiles( "dados.txt" , "keys.txt" , "teste.txt" );//Atualiza o arquivo de dados e de keys /* teste_pesquisa = pesquisarAluno( 2 , "dados.txt" , "keys.txt" ); if( teste_pesquisa != NULL ){ printf( "%d%s%f\n" , teste_pesquisa->codigo , teste_pesquisa->nome , teste_pesquisa->media ); }else { printf( "Registro não encontrado!\n" ); } */ } Editado Abril 13, 2010 por p4t0X Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Su_Suh Postado Abril 14, 2010 Autor Denunciar Share Postado Abril 14, 2010 Cara muito obrigado, mesmoootem alguns comandos que não conheço, sou iniciante em C mas me ajudou e muitoovlw mesmoo :D Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 p4t0X Postado Abril 14, 2010 Denunciar Share Postado Abril 14, 2010 O código não tá completo, mais dá pra ter +- uma noção do que fazer :sTem coisa que eu sei que não está funcionando, tem uns par de teste, mais foi o que eu consegui fazer no trampo =(Qualquer coisa só postar aí! Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Su_Suh
Ola Pessoal!
Preciso com muita urgencia, e não sei mais a quem recorrer, de ajuda
se alguém souber ou tiver um exemplo de um programa em C sobre arquivo sequencial indexado
ahh e não pode ter vetor
apenas em arquivo
por favor galera não sei mais onde procurar, não tem nenhum exemplo
desde já obrigado
aguardo a ajuda de voces. :)
Editado por quintelabRemovido Ajuda-URGENTE do Título
Link para o comentário
Compartilhar em outros sites
7 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.