Ir para o conteúdo
GOZK

[Ajuda] Erro Append

Mensagens Recomendadas

GOZK

Boa Noite,

Tenho um trabalho para a escola e está-me a dar um erro que ando às voltas e não tou a ver o que é,

 Writeln('Quanto ganhou o: ',newplayer,' ?');
 Readln(resultado);
 Writeln('Quanto perdeu o: ',newplayerB,' ?');
 Readln(resultadoB);
 Writeln('-----1');
 ASSIGN(textt,'C:\psc\pes\resultados.txt');
 Writeln('-----2');
 Append(textt);
 Writeln('-----3');
 Writeln(textt,'ola');
 Writeln('-----4');

Os writeln's de "---1" etc era para ver onde dava erro, e ele não chega a dizer o "----3" logo o o erro está no Append,presumo eu, algumas sugestões?

Obrigado,

GOZK

Editado por thoga31
Tags code + GeSHi

“ The good news about computers is that they do what you tell them to do. The bad news is that they do what you tell them to do. “

- Ted Nelson

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Os writeln's de "---1" etc era para ver onde dava erro, e ele não chega a dizer o "----3" logo o o erro está no Append,presumo eu, algumas sugestões?

O ficheiro 'C:\psc\pes\resultados.txt' existe?

Se tentares fazer um append a um ficheiro que não existe, dá erro.


"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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
GOZK

Sim existe, e tem porque eu tenho código atrás que vê o ficheiro e mostra os resultados no ecrã etc.. mas nessa parte dá-me erro.


“ The good news about computers is that they do what you tell them to do. The bad news is that they do what you tell them to do. “

- Ted Nelson

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Experimenta comentar o Assign.

Se fazes a leitura do ficheiro antes, presumo que já lá tenhas o assign. Só precisas de 1 para cada ficheiro.


"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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
GOZK

Se fizer close antes do Append:

    Writeln('-----1');
    ASSIGN(textt,'C:\psc\pes\resultados.txt');
    Writeln('-----2');
    close(textt);
    Writeln('-----3');
    Append(textt);
    Writeln('-----4');

Mostra o Writeln do 2 , logo dá erro no close.

E se tirar o ASSIGN e o close que adicionei dá o erro 104 que é "File not open for input".

Editado por thoga31
Tags code + GeSHi

“ The good news about computers is that they do what you tell them to do. The bad news is that they do what you tell them to do. “

- Ted Nelson

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Mais um caso em que o pessoal não tem noção do que fazem os procedimentos relacionados com ficheiros.

Retira o assign, deixa o close e deixa o append. Se já fizeste close antes então tira-o.

Pergunta: porque é que eu estou a sugerir isto?

Editado por thoga31

Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
GOZK

Obrigado, depois de retirar o assign e deixar o close e o append, o programa lê os meus comentários só que não adiciona o texto, neste caso, 'ola' , ao documento.txt, algumas sugestões?


“ The good news about computers is that they do what you tell them to do. The bad news is that they do what you tell them to do. “

- Ted Nelson

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Tens de mostrar mais código, em especial a parte que faz isso que referes. Não adivinhamos.

E não me respondeste...

Pergunta: porque é que eu estou a sugerir isto?


Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
GOZK

Tens de mostrar mais código, em especial a parte que faz isso que referes. Não adivinhamos.

E não me respondeste...

Sugeris-te tirar o Assign porque eu já estava a "chamar" o ficheiro 1 vez, o close foi para fechar o ficheiro porque ele estava a ler (Reset) , penso eu.

Aqui tens a parte do código:

if (resposta = 1) then
 begin
   Writeln('Quem ganhou? [NOME]');
   Readln(respostaA);
       if (respostaA = newplayer) then
          begin
            Writeln('Quanto ganhou o: ',newplayer,' ?');
            Readln(resultado);
            Writeln('Quanto perdeu o: ',newplayerB,' ?');
            Readln(resultadoB);
            close(textt);
            Append(textt);
            Writeln(textt,'asddsaddasdas');
      end;
 end;

Editado por thoga31
Tags code + GeSHi

“ The good news about computers is that they do what you tell them to do. The bad news is that they do what you tell them to do. “

- Ted Nelson

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Vê isto para colocares o código.

Sugeris-te tirar o Assign porque eu já estava a "chamar" o ficheiro 1 vez, o close foi para fechar o ficheiro porque ele estava a ler (Reset) , penso eu.

Exacto. Assim pelo menos certifico-me que entendeste e que não te limitaste a seguir a sugestão sem pensar no porquê. Não é incomum ;)

No código, convém fazeres o close antes, não fica ali bem. Tens a certeza que o programa chega àquela parte do código? Assim de repente não estou a ver nada de mal.

Editado por nunopicado
Correcção tag URL

Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
GOZK

Sim, tenho a certeza, a seguinte imagem mostra os writeln's a aparecerem: http://alojamentodeimagens.com/images/629print.png

Também penso que esteja tudo bem, mas devo estar a falhar em algum pormenor.


“ The good news about computers is that they do what you tell them to do. The bad news is that they do what you tell them to do. “

- Ted Nelson

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
GOZK

Que confusão de janela vem a ser aquela? De onde vem aquilo tudo?

A confusão é devido eu fazer ALT+F5 no pascal para visualizar o que o programa fez, visto que o programa se eu fizer RUN faz aquilo tudo mas vai abaixo , logo tive de fazer ALT+F5 para ver se ele fez os WriteLn's.

Editado por GOZK

“ The good news about computers is that they do what you tell them to do. The bad news is that they do what you tell them to do. “

- Ted Nelson

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

No Pascal? Ou no Notepad++?

Executa normalmente e não com artifícios do Notepad++, e mostra o output. Esses artifícios não trabalham bem com ficheiros.


Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Se com o readln naquele ponto não vai abaixo, significa que o problema está depois. Logo, o problema não é desse trecho de código.


Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
GOZK

Se com o readln naquele ponto não vai abaixo, significa que o problema está depois. Logo, o problema não é desse trecho de código.

Mas supostamente se não está a dar nenhum problema, podia, escreve no txt.. ele não chega a escrever no txt esse é o meu problema.


“ The good news about computers is that they do what you tell them to do. The bad news is that they do what you tell them to do. “

- Ted Nelson

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Quando executas o programa, tens o ficheiro aberto?

Ele nem sempre grava logo uma vez que é preciso fazer o flush dos dados. Não me lembro bem de como o Pascal faz o flush, mas é possível que naquele momento ele não o escreva.

Tens de mostrar o código todo. Assim nunca mais saímos daqui porque o problema não está aí.


Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
nunopicado

Quando fazes o Writeln(textt,'djkfsbndjfbsd');, essa informação é escrita em memória.

Só quando fazes o close é que ela é gravada no ficheiro.

Assim, estás a gravar essa informação, mas logo a seguir fazes novamente o reset, o que vai ler novamente o ficheiro ao disco, descartando as alterações em memória que fizeste até então.

Experimenta, antes do reset, fazer um close.

  • Voto 1

"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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
GOZK

Quando executas o programa, tens o ficheiro aberto?

Ele nem sempre grava logo uma vez que é preciso fazer o flush dos dados. Não me lembro bem de como o Pascal faz o flush, mas é possível que naquele momento ele não o escreva.

Tens de mostrar o código todo. Assim nunca mais saímos daqui porque o problema não está aí.

Não tenho o documento aberto, irei mandar um print do resto do código para evitar muito "spam" no tópico.

Aqui vai:

http://alojamentodeimagens.com/images/927print3.png

Depois daquele último end, só tenho mais uns end's:

 end;
end;
end;
readkey;
close(res);
end.

Muito Obrigado!

Nunopicado

Thoga31

O problema era que faltava o close(); depois de ele escrever, obrigado pelo vosso tempo e paciência :P

Alguma dúvida que tenha voltarei aqui.

Mais uma vez, obrigado e boa noite,

GOZK


“ The good news about computers is that they do what you tell them to do. The bad news is that they do what you tell them to do. “

- Ted Nelson

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
thoga31

Tens de ver bem o fluxo do programa ao analisar o código e ver quando é que fazes um acesso ilegal porque, por exemplo, te falta um close (causa mais provável).

Coloca o código dentro desta estrutura e diz-nos qual o output:

try
 // código do bloco principal
except
 on ex:exception do
   writeln('ERRO: ',ex.message);
end;
readln;  // pausa

Tens de meter isto na primeira linha, antes de program: {$mode objfpc}.

E tens de usar a unit sysutils.

Só assim conseguimos tentar entender o que se passa.

Não feches o programa nunca por ti, se ele der erro, ele avisa e não fecha.


Pronto, resolvido... falta de um close :D

De nada.

Editado por thoga31
  • Voto 1

Knowledge is free!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
passarito

Eu acho que nunca usei o Append, pois o Reset faz a mesma coisa e tenho a sensação que tive alguns problemas com o Append.

Por outro lado, e para ajudar quem se está a iniciar nisto, assim como quando escrevo um begin escrevo logo o end para não me esquecer, também quando faço um Rewrite, Reset ou Append escrevo logo o Close.

  • Voto 2

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.