Ir ao conteúdo
  • Cadastre-se

leitura de arquivos txt em pascal


Posts recomendados

olá,

 

estou com um problema no meu programa, eu não consigo ler variáveis array num arquivo txt, porque n sei, consigo escrever, mas n ler, então venho pedir ajuda a vocês

Program Testesparachl0e ;
const caminho = 'C:\Users\Usuario\Desktop\chl0e\chl0e_data\pos,mau.dat';
var
posmau : array [1..50] of string;
i : integer;
frase : string;
arq_posmau : text;
Begin
  assign(arq_posmau,'C:\Users\Usuario\Desktop\chl0e\chl0e_data\pos,mau.dat');
  rewrite(arq_posmau);
  for i:=1 to 50 do begin
    writeln(arq_posmau,posmau[i]);
{ai é q tá, só sei escrever a array, mas n ler, queria ler ela nos arquivos e colocar nos lugares da array}
  end;
  readln(frase);;
  for i := 1 to 50 do
  posmau[i] := arq_posmau;
  for i := 1 to 50 do
  begin
{aqui é um algoritimo de leitura da frase, pois queria colocar todas as possiveis,
só que o programa passou a lagar, então queria fazer tudo numa vaiavel,
dai ele lê tudo a array ali e checa se alguma é similar}
    if(frase = posmau[i]) then
    writeln(posmau[i]);
  end;
  close(arq_posmau);
End.

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá @carlosmixz.

 

1) ASSINALANDO O ARQUIVO

Se você criou uma constante, por quê inseriu o texto manualmente? :)

Em 04/01/2017 às 10:52, carlosmixz disse:

assign(arq_posmau,'C:\Users\Usuario\Desktop\chl0e\chl0e_data\pos,mau.dat');

 

Acho que seria algo como:

assign(arq_posmau,caminho);

 

2)  ESTRUTURA DO PASCAL

O Pascal executa os comando "esquerda para direita, de cima para baixo", da mesma forma que efetuamos leituras de texto. Então, ao começar rodar o begin principal executará primeiro o assign(), depois o rewrite(),  e "entrará" no for... dentro do for, irá ir executando o writeln, certo? lá tem:

  writeln(arq_posmau,posmau[i]);

No primeiro loop, o i vale 1. O posmau[] é uma array, logo ao usar posmau[i ], você estará acessando a posição 1 desse array, mas qual valor está nessa posição se o programa acabou de começar? ou seja, você estará escrevendo '' (um texto com nenhum caractere*.
*obs.: ao executar um programa, o Pascal automaticamente "zera" as variáveis, logo, todas as posições do array vão conter esse texto vazio

 

Ou seja, é um processo mecânico... para escrever, você posiciona e escreve. Para ler, você posiciona e ler... antes de escrever, você já precisa ter o que quer escrever, entende?

 

Em relação a leitura, você precisa reposicionar, com um reset(), e usar o read() para fazer o caminho inverso, ou seja, o writeln() joga da variável para o arquivo, e o read() jogo do arquivo para variável...

 

***

 

Obs.: o rewrite() serve para reescrever o arquivo, logo, se o arquivo já existir, ele vai ser apagado! E após deixa o arquivo aberto para escrita. Para abrir sem apagar ou configurar para leitura, pode usar o reset(), e caso queira posicionar, tanto para escrita ou leitura, pode usar o seek(). Mas no seu caso não precisa posicionar, já que fará uma leitura sequencial.

 

No aguardo.

 

Link para o comentário
Compartilhar em outros sites

  • 4 meses depois...
  • Membro VIP

Olá @carlosmixz.

 

Não tem problema. Se quiser, tente refazer a partir desse código e as minhas sugestões..

 

Qualquer coisa é só postar.

 

 

No aguardo.

adicionado 37 minutos depois

Abaixo segue um exemplo de código para demonstração de funcionamento:
 

Program Testesparachl0e;
const
  {caminho = 'C:\Users\Usuario\Desktop\chl0e\chl0e_data\pos,mau.dat';} //aqui está usando o caminho absoluto, ou seja, escolhendo onde vai gerar
  caminho = 'arqPosMau.txt'; //usando o camino relativo, ou seja, gera o arquivo na pasta do programa
var
  posmau     :array [1..50] of string;
  i          :integer;
  frase      :string;
  arq_posmau :text;
BEGIN
assign(arq_posmau,caminho); //assinala o arquivo com o seu respectivo caminho (para o Pascal saber onde está o arquivo)
rewrite(arq_posmau); //cria ou recria o arquivo no caminho que foi assinalado e abre em MODO DE ESCRITA (o pronteiro de escrita fica na primeira linha)

writeln('Digite a frase e pressione ENTER');
for i:=1 to 5 do
  begin
  write  ('Frase ',i,':');
  readln(frase);
  writeln(arq_posmau,frase); //escreve o conteúdo da variável frase no arquivo. Também escreve "ENTER" (faz descer linha, devido ao ln), ou seja, o "ponteiro de escrita" ficará na linha de baixo
  end;
 
reset(arq_posmau); //reabre o arquivo de texto no "MODO LEITURA", ou seja, reposiciona o "ponteiro de leitura" lá no início do programa
for i:=1 to 5 do
  readln(arq_posmau,posmau[i]); //ler, a partir do ponteiro de leitura, a próxima linha e joga o dado na variável posmau[i]. O "ln" faz o ponteiro de leitura descer para linha de baixo

for i:= 1 to 5 do
  writeln(posmau[i]);
  
close(arq_posmau); //fecha o arquivo (libera para o windows)

readln;
END.

 

 

Geralmente o arquivo de texto (já que escolheu text) vai ficar na mesma pasta onde tá o ".exe" que o Pascal gerará... Se o programa rodar corretamente aí, verá que dentro do arquivo terá as linhas que você digitou.

 

Lembrando que para esse código, toda vez que executar o programa, o arquivo de texto será recriado, ou seja, perderá o conteúdo que tinha antes...  Para abrir um arquivo de texto qualquer (ou no caso o do programa), poderia utilizar o append desta forma, o arquivo será aberto com o "ponteiro de escrita" no final do arquivo, daí ao escrever algo nele, ficará logo abaixo a última linha. Como já citei no código, o reset é o que abre para leitura.

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...