Jump to content

Recommended Posts

Posted (edited)
Program lol;
uses crt;

Type Agenda = Record

       nome:String;    

End;

Var

Registro:Agenda;
Texto:Text;
Linha:String;


Begin

   Write('Digite o nome : ' );
   Read(Registro.nome);

       If IOResult <> 0 then // seria essa condição?

           Begin

               Writeln('Ja existe');

           End

               Else

           Begin

                   Assign(Texto,'Arquivo.txt');
                   ReWrite(Texto);
                   Writeln(Registro.nome);
                   Close(Texto);


           End;


End.

O arquivo quando nao existe ele esta criando legal, o problema e quando ele existe ele esta distruindo o existente e criando um outro por que o que eu estou fazendo de errado? eu estou usando o free pascal

Edited by nunopicado
Adicionadas tags GeShi
Posted (edited)

O ReWrite faz o seguinte:

- o ficheiro não existe: cria;

- o ficheiro existe: recria, ou seja, apaga o existente e inicia um novo com o mesmo nome.

Para ler um ficheiro sem o apagar, mas sem ter a oportunidade de o editar, utiliza-se o Reset.

Além disso, o IOResult, ali naquele sítio, não vai fazer nada.

Edited by thoga31

Knowledge is free!

Posted (edited)

O que estás a fazer mal é que estás a usar sempre o ReWrite.

Este comando serve para criar um ficheiro, ou seja, se não existe cria-o, se existe apaga-o e cria um por cima (exactamente o que te está a acontecer).

O que precisas é, antes de mais, tentar abrir o ficheiro para leitura e escrita (sem o criar). Se funcionar, maravilha, se não funcionar, aí sim, crias um novo.

Outra coisa é que estás a usar o IOResult sem primeiro tentar abrir o ficheiro, pelo que a função não terá valor nenhum com significado para o caso.

E mais uma, ao escrever o registo, está-te a faltar dizer que vai escrever no ficheiro. Como tens, ele só escreve no ecrã.

Exemplo:

.
.
begin
  Assign(Texto,'Arquivo.txt');  // Primeira coisa é atribui o nome do ficheiro à variável
  {$i-}  // Desactivar o controlo de erros nativo, para poder testar se o ficheiro existe sem o compilador dar erro
  Reset(Texto);  // Abre o ficheiro para leitura e escrita (não o cria de novo se não existir)
  {$i+}  // Já se pode reactivar o controlo de erros
  if IOResult<>0   // Testa o resultado da abertura do ficheiro: 
     then rewrite(Texto);  // Se for diferente de 0, é porque o ficheiro não existia, e portanto, cria-o

  Writeln(Texto,Registro.nome);  // Escreve no ficheiro o conteúdo de Registro.nome
  Close(Texto);  // Fecha e grava o ficheiro
end.

PS: Existe um tópico no forum com tudo isto descrito em pormenor, é preciso procurar! 😉

Edited by nunopicado

"A humanidade está a perder os seus génios... Aristóteles morreu, Newton já lá está, Einstein finou-se, e eu hoje não me estou a sentir bem!"

> Não esclareço dúvidas por PM: Indica a tua dúvida no quadro correcto do forum.

Posted (edited)

me explica melhor esta dando erro

Program lol;
uses crt;

Type Agenda = Record

       nome:String;    

End;

Var

Registro:Agenda;
Texto:Text;
Linha:String;


Begin

   Write('Digite o nome : ' );
   Read(Registro.nome);

       Assign(Texto,'Arquivo.txt'); // seria isso?
       Reset(Texto);

           If IOResult <> 0 then

               Begin

                   Writeln('Ja existe');

               End

                   else

               Begin

                   Assign(Texto,'Arquivo.txt'); // seria isso?
                   ReWrite(Texto);
                   Writeln(Registro.nome);
                   Close(Texto);


               End;


End.
Edited by thoga31
GeSHi

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.