Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
carlosmixz

leitura de arquivos txt em pascal

Recommended Posts

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.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Opa, rapaz, o projeto estava parado faz um tempo e agr meu HD queimou, então acho q a resposta é n... D:

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    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.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×