22.10.2014 Views

Aprendendo a Programar Programando em Linguagem C - FSM

Aprendendo a Programar Programando em Linguagem C - FSM

Aprendendo a Programar Programando em Linguagem C - FSM

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

{<br />

FILE *p;<br />

p = fopen(s, "rb");<br />

if (p == NULL)<br />

return(0);<br />

else<br />

{<br />

fclose(p);<br />

return(1);<br />

}<br />

}<br />

Assim a função CriaArquivo() definida anteriormente deveria ser escrita da seguinte forma:<br />

FILE *CriaArquivo(char s[12])<br />

{<br />

FILE *p;<br />

p = fopen(s, "rb");<br />

if (p == NULL)<br />

{<br />

p = fopen(s, "wb");<br />

return(p);<br />

}<br />

else<br />

printf("\a Arquivo %s já existe!");<br />

}<br />

Localizando um registro num arquivo<br />

Uma operação muito comum <strong>em</strong> arquivos é a verificação de que um determinado registro está nele<br />

armazenado. Esta operação é normalmente (como já foi dito no capítulo 7) chamada consulta, pesquisa ou<br />

busca e deve ser feita de acordo com o valor da chave do registro ou de um outro campo que, relativamente,<br />

identifique o registro. No ex<strong>em</strong>plo que estamos discutindo, a consulta pode ser feita pelo campo Mat (de<br />

matrícula) ou pelo campo Nome. Em geral, a consulta se processa com a localização do registro, a<br />

consequente exibição do seu conteúdo e o retorno da posição que ele ocupa no arquivo.<br />

A localização do registro pode ser feita, abrindo-o com fopen() e o percorrendo até que o valor da<br />

chave seja encontrado; a exibição do seu conteúdo pode ser feita através das funções fread() e fprintf(), e a<br />

posição que ele ocupa no arquivo é fornecida por uma das funções fgetpos() e ftell() que possu<strong>em</strong> os<br />

protótipos<br />

int fgetpos(FILE *p, fpos_t *pos);<br />

long ftell(FILE *p);<br />

onde, na primeira, fpos_t é um tipo de dado pré-definido.<br />

Nas duas funções, p receberá o ponteiro associado ao arquivo onde está se realizando a pesquisa; a<br />

posição do registro pesquisado (dada pela ord<strong>em</strong> do último byte ocupado pelo último campo deste registro) é<br />

armazenada na variável cujo endereço for passado para o parâmetro pos de fgetpos() ou será retornado pela<br />

função ftell(). Como <strong>em</strong> vetores, o primeiro byte ocupado pelo primeiro campo do primeiro registro é o de<br />

ord<strong>em</strong> zero.<br />

/*Função que verifica se um registro com matricula dada pertence ao arquivo, retornando sua posição<br />

no arquivo*/<br />

int ConsultaRegistro(char s[12], char s1[12])<br />

{<br />

FILE *p;<br />

int Achou = 0;<br />

struct TRegistro r;<br />

fpos_t Byte;

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!