Jump to content

Recommended Posts

Posted
Program Estudo;
uses crt;

Type   Esposas = Record

   nome:String;
   email:String;


End;

Vetor_Esposas = Array[1..10] of Esposas;

Var

Texto:Text;
Op:Integer;
Esposa:Vetor_Esposas;
i,quantidade:Integer;
Temporario:String;

Begin

       Writeln(' 1) CADASTRAR ');
       Writeln(' 2) MOSTRAR ');
       Writeln(' 3) LIMPAR  ');
       Writeln(' 4) EDITAR  ');
       Write('Digite a sua opcao: ');
       Read(Op);

           case Op of

               1:
                   Begin

                           Write('Digite a sua quantidade de cadastro em tempo real : ');
                           Read(quantidade);

                           Assign(Texto,'Arquivo.txt');
                           {$i-}
                           Reset(Texto);
                           {$i+}

                   For i:= 1 to quantidade do
                       Begin    
                               If IOResult <> 0 Then

                                   Begin

                                       Write('Digite o nome: '); // Ele imprime essa menssagem e fecha sozinho
                                       Read(Esposa[i].nome);
                                       Write('Digite o email: ');
                                       Read(Esposa[i].email);

                                       Writeln('Cadastrado com sucesso!');

                                       clrscr;

                                       ReWrite(Texto);
                                       Writeln(Texto,Esposa[i].nome);
                                       Writeln(Texto,Esposa[i].email);
                                       Close(Texto);




                                   End

                                       Else

                                   Begin

                                       Write('Digite o nome: ');
                                       Read(Esposa[i].nome);
                                       Write('Digite o email: ');
                                       Read(Esposa[i].email);

                                       Writeln('Cadastrado com sucesso!');

                                       clrscr;

                                       Append(Texto);
                                       Writeln(Texto,Esposa[i].nome);
                                       Writeln(Texto,Esposa[i].email);
                                       Close(Texto);


                                   End;

                       End;    


                   End;

               2:

                   Begin

                       Assign(Texto,'Arquivo.txt');
                       {$i-}
                       Reset(Texto);
                       {$i+}

                           If IOResult <> 0 Then

                               Begin

                                   Writeln('Por favor faça algum cadastro');


                               End

                                   Else

                               Begin

                               While  not EoF(Texto) do

                                   Begin

                                           Readln(Texto,Temporario);
                                           Writeln('Nome : ',Temporario);
                                           Writeln('Email : ',Temporario);

                                   End;


                               End;

                   End;

               3:

                   Begin

                       Assign(Texto,'Arquivo.txt');
                       {$i-}
                       Reset(Texto);
                       {$i+}

                           If IOResult <> 0 Then

                               Begin

                                   Writeln('Arquivo nao existe');

                               End

                                   Else

                               Begin

                                   While not EoF(Texto) do

                                       Begin

                                           Readln(Texto,Temporario);

                                               If Temporario = '' Then

                                                   Begin

                                                       Write('Será apagado');
                                                       Erase(Texto);

                                                   End

                                                       Else

                                                   Begin

                                                       Writeln('O arquivo existe coisa dentro ');
                                                       Erase(Texto);


                                                   End;

                                       End;


                               End;



                   End;


               4:

                   Begin

                   //não estou conseguindo!

                   End


                           Else

                   Writeln('Opcao Errada');



           End;



End.

Eu estou usando o notepad ++ com plugin com o free pascal o problema e que ele compila normal execulta normal quando chega na messagem quando ele chega digite o nome ele teria que ler o nome do registro mais nao le ele fecha por que pessoal? e eu nao estou conseguindo editar uma linha do arquivo também eu pesebi isso acontece quando eu leio mais de uma vez em registro tipo

Read(Esposa.nome); // tem vez que ele le e fecha tem vez que nem le e nao procegue será que é o compilador? eu fiz um teste desse no pascalzim funciona normal o problema e que eu nao consigo manipular o arquivo

Read(Esposa.email);

Posted (edited)

O teu problema reside no Read, que só lê um caracter: devias utilizar ReadLn, que lê um conjunto de caracteres aka linha de texto.

Edited by thoga31

Knowledge is free!

Posted

Vamos por partes:

Antes de mais, volto a dizer o que já te disse: Tens de melhorar a indentação.

Olhar para o teu código é um pesadelo, no sentido em que não se percebe que código pertence onde. Nem sei como é que te entendes no meio dele.

Em segundo lugar, o Assign só é para fazer uma vez. Não quer dizer que usando 3 ou 4 ou mil vezes ele não funcione, mas é meio caminho andado para teres erros mais tarde que não sabes de onde vêm.

Usas um assim que começas o programa, e logo a seguir testas se o ficheiro existe ou não, e se não existe, cria-o.

A partir daí, só tens de usar o reset e o close (e eventualmente o append, embora eu não seja grande fã deste comando).

Terceiro: Raramente o Read é usado. Não é que ele leia só um caracter, mas ao não ter um fim de linha, quando fizeres o write a seguir ele irá baralhar-se visualmente.

Além do mais, usando o read, os caracteres CR-LF que inseres (sem saber) ao dar enter vão ficar em memoria, o que irá fazer com que futuros read's sejam passados à frente.

Sempre que fizeres uma pergunta ao utilizador, em que ele tenha de escrever uma cadeia de texto, lês com o readln;

Quarto: Nunca digas ao utilizador que algo foi feito com sucesso antes de tentares fazer esse algo...

Dizes ali 'Cadastrado com sucesso' assim que o utilizador te dá os dados, antes mesmo de os tentares escrever no ficheiro. Primeiro escreves, e depois, se não der erro, é que dás a mensagem ao utilizador.

Quinto: Estás a escrever cada registo em duas linhas (escreves no ficheiro o nome, e depois na linha seguinte escreves o email), mas ao ler, só estás a ler uma linha, para a variavel temporario. Resultado, nome e email vão estar iguais, e muito provavelmente, não vão ter nada a ver com a realidade.

Ao leres tens de ler para cada registo o mesmo numero de linhas que escreveste. Escreves 2, les 2.

Uma delas será o nome, a segunda será o email.

Sexto: Para editares, tens de ter noção da posição do ficheiro onde estás, e nunca perder o rasto dessa posição. De cada vez que fazes um readln no ficheiro, ele muda para a linha seguinte e quando fores escrever os dados alterados, já vais estar no sitio errado. O resultado: ficheiro corrompido.

Uma das maneiras é atribuires um código virtual ao registo.

Por exemplo, ao mostrar, para cada registo dá-lhe um número. Depois ao editar, perguntas o nº, e vais andando pelo ficheiro até essa posição. Depois é só escrever e pronto!

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

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.