FórumGdH

Página Inicial do Guia do Hardware

Registrar FAQ Calendário Pesquisar Mensagens de Hoje Marcar Fóruns Como Lidos

Voltar   FórumGdH > Profissional > Programação, scripts, web e banco de dados
Bem-vindo ao FórumGdH
Não se esqueça de se registrar, é grátis . Nós temos 754.120 usuários, convidamos você fazer parte de nossa comunidade também! Se ainda não encontrou o que procura use nossa pesquisa. Esperamos que aprecie nosso trabalho.

Resposta
 
Opções do Tópico
Antigo 28-05-2005, 19:12   #1 (permalink)
Trakinas
Super Participante
 
Registrado em: Feb 2004
Localização: Juiz de Fora
Mensagens: 451
Reputação: 17 Trakinas está indo no caminho certo
Enviar mensagem via ICQ para Trakinas Enviar mensagem via AIM para Trakinas Enviar mensagem via Yahoo para Trakinas
Padrão pascal - arquivo estruturado

Olá

estou tentando fazer um programinha para criar registros, ler, e depois alterar.

A parte de alteração só posso fazer quando eu terminar a de leitura (pelo menos eu acho... hehe), e ela tá com problema.

Quando eu mando abrir o arquivo, ele lê os registros normalmente - se for um registro novo. Se eu mandar gravar mais dados, ele grava o novo registro por cima do primeiro, nao ultimo... hehe

Deêm uma olhada no código. Se puderem, compilem e vejam só... =P

Código:
program trab_est; uses crt; type registro = record matricula: string[10]; nome : string[30]; endereco : string[40]; sexo : string[1]; fone : string[15]; end; arquivo = file of registro; var trabalho: arquivo; reg: registro; opcao : integer; aux : string [10]; total: integer; procedure gravar; begin assign(trabalho,'trabalho.cad'); //rewrite(controle); {$I-} reset(trabalho); seek(trabalho,Filepos(trabalho)); if IORESULT <> 0 then rewrite(trabalho) else Seek(trabalho,FilePos(trabalho)-0); {$I+} clrscr; write('Informe Matricula:'); readln(reg.matricula); while reg.matricula <> '-1' do begin write ('Informe Nome:'); readln (reg.nome); write ('Informe Endereco:'); readln (reg.endereco); write ('Informe Sexo:'); readln (reg.sexo); while (reg.sexo <> 'f' ) and (reg.sexo <> 'm') do begin writeln ('Valor Invalido. Favor digitar um valor valido (f ou m).'); readln(reg.sexo); end; write('Informe Fone:'); readln (reg.fone); write(trabalho,reg); {grava registro após o último registro do arquivo} clrscr; total := filesize(trabalho); write('Numero de registros:', total); writeln(''); write('Informe nova Matricula:'); readln(reg.matricula); end; close(trabalho); end; {procedure leitura; var cadast: string; begin assign (trabalho,'trabalho.arq'); reset(trabalho); seek(trabalho,filepos(trabalho)-0); read(trabalho, reg); } {while not EOF(trabalho) do begin read (trabalho,reg); writeln('Matricula:', reg.matricula); writeln('Nome.....:', reg.nome); writeln('Endereco.:', reg.endereco); writeln('Sexo.....:', reg.sexo); writeln('Fone.....:', reg.fone); writeln(''); writeln(reg.matricula); break; end;} procedure leitura; var cadast: string; begin assign(trabalho,'trabalho.cad'); reset(trabalho); {seek(trabalho,filepos(trabalho)-0);} while not eof(trabalho) do begin read (trabalho,reg); seek(trabalho,filepos(trabalho)-0); writeln('Matricula:', reg.matricula); writeln('Nome.....:', reg.nome); writeln('Endereco.:', reg.endereco); writeln('Sexo.....:', reg.sexo); writeln('Fone.....:', reg.fone); writeln(''); end; end; begin writeln ('digite opção'); writeln ('1- Gravar'); writeln ('2- Ler'); readln(opcao); case (opcao) of 1: gravar; 2: leitura; end; readkey; end.
obrigado!

=)
Trakinas está offline   Responder com Quote
Antigo 31-05-2005, 15:22   #2 (permalink)
Hellsing
Novo Membro
 
Registrado em: Sep 2004
Localização: Juiz de Fora - MG
Mensagens: 145
Reputação: 16 Hellsing está indo no caminho certo
Enviar mensagem via ICQ para Hellsing
Padrão

Código:
program trab_est; {fazer chave primaria funfar... melhorar a cosmetic... ¬¬ **** que o pariu!!! em casa funfou!! arrumar alteracao => tirar matricula restringir string como inteiro usar a ***** da tela inteira!!} uses crt; type registro = record matricula: string[3]; nome : string[60]; endereco : string[60]; sexo : string[1]; fone : string[8]; end; //arquivo = file of registro; var trabalho: Text; reg: registro; opcao : integer; execucao : string; cont : integer; procedure cabecalho; begin textcolor(23); gotoxy(17,1); writeln (' TRABALHO DE ESTRUTURAS DE DADOS '); gotoxy(17,2); writeln (' Primeiro Periodo '); gotoxy(17,3); writeln (' - Autores - '); gotoxy(17,4); writeln (' Ricardo Cappellano '); gotoxy(17,5); writeln (' Valerio H Cordeiro Junior '); gotoxy(17,6); writeln (' Romulo Siqueira '); gotoxy(1,7); for cont := 1 to 80 do begin write ('-'); end; end; procedure gravar; {inicia procedure de gravação} var loop : boolean; begin AssignFile(trabalho,'trabalho.txt'); {$I-} append(trabalho); if IORESULT <> 0 then rewrite(trabalho) else append(trabalho); {$I+} repeat ClrScr; cabecalho; textcolor(15); textbackground(0); writeln (''); write(' Informe Matricula: '); readln (reg.matricula); writeln (trabalho, reg.matricula); writeln(''); writeln('+-----------------------------------+'); write (' Informe Nome: '); readln (reg.nome); writeln (trabalho, reg.nome); writeln('+-----------------------------------+'); write (' Informe Endereco: '); readln (reg.endereco); writeln (trabalho, reg.endereco); writeln('+-----------------------------------+'); write (' Informe Sexo: '); readln (reg.sexo); while (reg.sexo <> 'f' ) and (reg.sexo <> 'm') do {loop para erro de valor para a string sexo} begin textbackground(11); textcolor(blue+blink); {valor blink, ou 16, nao "compilante" para DevPascal/FreePascal} writeln(''); writeln ('****Valor Invalido. Favor digitar um valor valido (f ou m).****'); textcolor(15); textbackground(0); writeln('+-----------------------------------+'); write (' Informe Sexo: '); readln(reg.sexo); end; {loop do campo SEXO} writeln (trabalho, reg.sexo); textcolor(15); textbackground(0); writeln('+-----------------------------------+'); write('Informe Fone: '); readln (reg.fone); writeln (trabalho, reg.fone); append(trabalho); {grava registro após o último registro do arquivo} textcolor(15); textbackground(0); writeln (''); writeln ('Abrir nova matrícula ?'); readln (execucao); if (execucao = 's') or (execucao = 'S') then begin continue; end else if (execucao = 'n') or (execucao = 'N')then begin break; end; loop := true; while loop do begin if (execucao <> 's') and (execucao <> 'S') and (execucao <> 'n') and (execucao <> 'N') then begin gotoxy (1,25); writeln('>>> Opcao invalida. Digite (S/N) <<<'); gotoxy (1,24); readln(execucao); end else begin loop := false; end; end; {loop de validacao da variavel EXECUCAO} until (execucao = 'n') or (execucao = 'N'); CloseFile(trabalho); ClrScr; end; procedure leitura; {abrir programa para leitura} begin clrscr; AssignFile(trabalho,'trabalho.txt'); append(trabalho); {abre o arquivo e posiciona na última linha} reset(trabalho); {posiciona na primeira linha} cabecalho; while not EOF(trabalho) do begin {$i-} textcolor(15); textbackground(0); writeln (''); writeln (''); readln (trabalho, reg.matricula); writeln('Matricula:', reg.matricula); readln (trabalho, reg.nome); writeln('Nome.....:', reg.nome); readln (trabalho, reg.endereco); writeln('Endereco.:', reg.endereco); readln (trabalho, reg.sexo); writeln('Sexo.....:', reg.sexo); readln (trabalho, reg.fone); writeln('Fone.....:', reg.fone); end; CloseFile(trabalho); writeln(''); writeln ('Aperte qualquer tecla para continuar.'); {fecha o arquivo para a leitura} readkey; ClrScr; end; (* procedure alterar; {alteração do arquivo} var aux0: string[30]; aux1: string[30]; aux2: string[30]; aux3: string[30]; aux4: string[30]; begin clrscr; assign (trabalho,'trabalho.cad'); reset (trabalho); {abre para leitura} window(10,11,46,25); writeln('+-----------------------------------+'); writeln (' Informe a Matricula a ser alterada: '); readln (aux0); while (reg.matricula <> aux0) and (not(eof(trabalho))) do {loop de checagem de cadastro válido} begin read (trabalho,reg); if (reg.matricula = aux0) then begin writeln('+-----------------------------------+'); writeln (' Informe a nova Matricula: '); readln (aux1); writeln('+-----------------------------------+'); writeln (' Informe o novo Nome: '); readln (aux2); writeln('+-----------------------------------+'); writeln (' Informe o novo Endereco: '); readln (aux3); writeln('+-----------------------------------+'); writeln (' Informe o novo Fone: '); readln (aux4); seek(trabalho,(filepos(trabalho)-1)); reg.matricula := aux1; reg.nome := aux2; reg.endereco := aux3; reg.fone := aux4; end; write(trabalho,reg); end; close (trabalho); {fecha o arquivo após alterar registro} clrscr; write ('Para voltar ao Menu, digite -1: '); {flag para voltar ao menu} readln(aux); clrscr; end; *) begin ClrScr; repeat {loop de repeticao para voltar ao menu com a flag} cabecalho; textbackground (0); textcolor(15); writeln('+-----------------+'); writeln ('| Digite a Opcao |'); writeln('+-----------------+'); writeln ('| 1 - Gravar |'); writeln('+------------------'); writeln ('| 2 - Ler |'); writeln('+-----------------+'); writeln ('| 3 - Sair |'); writeln('+-----------------+'); write(' Opcao: '); readln(opcao); case (opcao) of 1: gravar; 2: leitura; 3: delay (100); end; until (opcao = 3); end.
Tive que refazer muita coisa no código, pra evitar de ocorrer erros na manipulação do arquivo externo, do tipo: sobrescrever o número de matrícula, ou apagar alguma linha do nada... coisas desse tipo.


Avise se der certo.


Falowz...


Hellsing
__________________
"Conhecimento e força dão poder, mas só o caráter granjeia respeito"
Bruce Lee
Hellsing está offline   Responder com Quote
Antigo 31-05-2005, 15:50   #3 (permalink)
jqueiroz
Highlander
 
Avatar de jqueiroz
 
Registrado em: May 2002
Localização: Tijuca/RJ
Idade: 9
Mensagens: 87.724
Reputação: 778 jqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputaçãojqueiroz tem uma fabulosa reputação
Padrão

Hellsing, acho que a tua solução não serve: vc não está usando arquivo estruturado. Tenho certeza de que, sendo um trabalho de curso, isso deve ser obrigatório.

Trakinas, dê uma olhada no manual para essa procedure "seek", pra ver como você pode fazer pra se posicionar no fim do arquivo, pois da forma como você está fazendo ("Seek(trabalho,FilePos(trabalho)-0);"), me parece que você não está se movendo: vc está indo pra posição corrente, que é onde você já está...

Uma alternativa seria, nessa hora, vc fechar o arquivo, e reabrí-lo em seguida em modo append, como o Hellsing fez.
__________________
Visite Quepolis (link de indicação) | "chmod 777 nunca ajudou ninguém" (c) 2002-2010 JQueiroz/FGdH
CCNP: √ ² CCSI: □ | Conheça o Novo Bebuns
jqueiroz está offline   Responder com Quote
Antigo 31-05-2005, 15:57   #4 (permalink)
Hellsing
Novo Membro
 
Registrado em: Sep 2004
Localização: Juiz de Fora - MG
Mensagens: 145
Reputação: 16 Hellsing está indo no caminho certo
Enviar mensagem via ICQ para Hellsing
Padrão

Citação:
Postado Originalmente por jqueiroz
Hellsing, Hellsing, acho que a tua solução não serve: vc não está usando arquivo estruturado. Tenho certeza de que, sendo um trabalho de curso, isso deve ser obrigatório.
Nem parei pra pensar nisso. 8O
Bom, é uma alternativa viável. E é complicado... anos de programação Delphi não podem ser facilmente esquecidas (-_-). Porque em POO, esse é um recurso muito utilizado.
Mas se o 'fessor do Trakinas não esquentar... manda ver !!!

Citação:
Postado Originalmente por jqueiroz
Trakinas, dê uma olhada no manual para essa procedure "seek", pra ver como você pode fazer pra se posicionar no fim do arquivo, pois da forma como você está fazendo ("Seek(trabalho,FilePos(trabalho)-0);"), me parece que você não está se movendo: vc está indo pra posição corrente, que é onde você já está...
Li no manual do Delphi. "Seek" não pode ser usado com arquivo texto.


Falowz...


Hellsing
__________________
"Conhecimento e força dão poder, mas só o caráter granjeia respeito"
Bruce Lee
Hellsing está offline   Responder com Quote
Resposta


Opções do Tópico

Regras de Mensagens
Você não pode criar tópicos
Você não pode postar respostas
Você não pode anexar arquivos
Você não pode editar suas mensagens

Código vB está Ligado
Smiles estão Ligado
Código [IMG] está Ligado
Código HTML está Desligado
Ir para...


Horários baseados na GMT -3. Agora são 14:56.