Ir ao conteúdo

Dúvida: Exibindo dados de um arquivo através de uma variável de outro arquivo


Murilo Rocha

Posts recomendados

Postado

Olá equipe do Clube do Hardware, depois de um bom tempo, recorro a vocês novamente, pra sanar uma dúvida minha.

Desculpa se o título não foi tão esclarecedor, mas o problema é que - em meu projeto de cervejaria - ter uma opção em que tenho que mostrar todos os pedidos por vendedor. O nome do vendedor está salvo em um registro para dados do próprio vendedor e estou comparando o nome dele nesse registro, com o nome dele no registro de pedidos.

Pois bem, consegui fazer isso porém só consigo mostrar todos os pedidos referente ao primeiro registro de vendedor, não consigo mostrar os pedidos para os vendedores seguintes.

 

Segue o código:

 

<

//Rotina [OPÇÃO 6 - Gerando arquivo]procedure geraarquivo;varopcao: char;sair: boolean;begin 	 sair := false;     repeat     begin     titulo;     writeln('6 - Gerando arquivo');     writeln;     writeln('Escolha uma das opcoes abaixo:');     writeln;     writeln('1 - Ver todos os pedidos por mes [indisponivel];');     writeln('2 - Exibir ranking;');     writeln('3 - Tabela de precos;');     writeln('4 - Menu principal;');     writeln;     readln(opcao);     case opcao of          '2': begin          clrscr;          titulo;          reset(arq4);          read(arq4,reg4);          writeln('Ranking');          writeln;          writeln('----------------------------------------------------------');          writeln('Por cervejas:');          writeln;          writeln('Cerveja mais pedida    : ',reg4.maisvendida,'.');          writeln('Cerveja menos pedida   : ',reg4.menosvendida,'.');          writeln;          writeln('----------------------------------------------------------');          writeln('Pedidos por vendedor:');          writeln;          reset(arq1);          reset(arq2);          while not eof (arq1) do          begin               for 1 to filesize(arq1)+1 do               begin               read(arq1, reg1);               writeln('Vendedor: ',reg1.nomevendedor[1],':');               writeln;               while not eof (arq2) do               begin                    read(arq2, reg2);                    if (reg1.nomevendedor=reg2.nomevendedor) then                    begin                    writeln;                    writeln('Pedido n§: ',reg2.numpedido);                    writeln('Data: ', reg2.datapedido);                    writeln('Vendedor: ', reg2.nomevendedor);                    writeln('Valor de venda: R$ ', reg2.valortotal:0:2);                    end;               end;               end;          end;          readln;          clrscr;          close(arq1);          close(arq2);          close(arq4);          end;
  • Membro VIP
Postado

Olá.

Eu vejo dois problemas iniciais:
[1]

          while not eof (arq1) do          begin               for 1 to filesize(arq1)+1 do               begin

Creio que esse for não deve existir.. basta o while.

e
[2]
Porque em:

 

 writeln('Vendedor: ',reg1.nomevendedor[1],':');

Você usa "[1]" e em:

 

 if (reg1.nomevendedor=reg2.nomevendedor) then

Você não usa?


Para eu entender melhor seria preciso demonstrar qual é a estrutura do arq1.


Poste as estruturas dos arquivos (declaração das variáveis)...

Postado

Olá Simon, consegui resolver o problema no dia seguinte a postagem. Não conseguia acessar os dados referente ao outro vendedor, porque faltou resetar o arquivo para busca e dar um seek para o próximo vendedor antes de recomeçar o laço. Eu usei aspas nas palavras que iam compor a frase onde reg1.nomevendedor[1] iria fazer parte.

Grato pela resposta.
Segue a solução:

 

          while not eof (arq1) do          begin               read(arq1, reg1);               writeln('---------------------------------------');               writeln('Vendedor: ',reg1.nomevendedor,':');               while not eof (arq2) do               begin                    read(arq2, reg2);                    if (reg1.nomevendedor=reg2.nomevendedor) then                    begin                    writeln;                    writeln('Pedido n§: ',reg2.numpedido);                    writeln('Data: ', reg2.datapedido);                    writeln('Vendedor: ', reg2.nomevendedor);                    writeln('Valor de venda: R$ ', reg2.valortotal:0:2);                    end;               end;          reset(arq2);          seek(arq1, filepos(arq1));          end;
  • Membro VIP
Postado

[...] Não conseguia acessar os dados referente ao outro vendedor, porque faltou resetar o arquivo para busca e dar um seek para o próximo vendedor antes de recomeçar o laço. Eu usei aspas nas palavras que iam compor a frase onde reg1.nomevendedor[1] iria fazer parte.

Grato pela resposta.

Segue a solução:

 

          while not eof (arq1) do          begin               read(arq1, reg1);               writeln('---------------------------------------');               writeln('Vendedor: ',reg1.nomevendedor,':');               while not eof (arq2) do               begin                    read(arq2, reg2);                    if (reg1.nomevendedor=reg2.nomevendedor) then                    begin                    writeln;                    writeln('Pedido n§: ',reg2.numpedido);                    writeln('Data: ', reg2.datapedido);                    writeln('Vendedor: ', reg2.nomevendedor);                    writeln('Valor de venda: R$ ', reg2.valortotal:0:2);                    end;               end;          reset(arq2);          seek(arq1, filepos(arq1));          end;

 

Olá Murilo Rocha,

 

Só uma pequeno adendo..

De fato, faltou reposicionar o segundo arquivo, mas creio que não é preciso dar um seek no primeiro, pois ao ler um dado no arquivo, automaticamente já vai apontar para o próximo.

Um exemplo de como poderia ficar...

 

          reset(arq1); //reposiciona no início do arquivo (para leitura)          while not eof (arq1) do            begin            read(arq1, reg1); //OBS.: o read "lê e joga em reg1 e após já pula para o próximo".            writeln('---------------------------------------');            writeln('Vendedor: ',reg1.nomevendedor,':');            reset(arq2); //reposiciona no início do arquivo (para leitura)            while not eof (arq2) do              begin              read(arq2, reg2);              if (reg1.nomevendedor=reg2.nomevendedor) then                begin                writeln;                writeln('Pedido n§: ',reg2.numpedido);                writeln('Data: ', reg2.datapedido);                writeln('Vendedor: ', reg2.nomevendedor);                writeln('Valor de venda: R$ ', reg2.valortotal:0:2);                end;              end;            {seek(arq1, filepos(arq1));} //não tem efeito nenhum! pode apagar essa linha (creio eu)            end;

No aguardo.

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...