Ir ao conteúdo

Pascal/Delphi Salvar Conteúdo de um TXT para um novo TXT caractere por caractere


Ir à solução Resolvido por SamuraiOcidental,

Posts recomendados

Postado

Olá, ando estudando Delphi e me surgiu um problema na manipulação de Arquivos, estou com problema de implementar um meio de salvar o conteúdo de um .TXT para outro arquivo .TXT novo, de forma que percorra todos os caracteres e os coloque um a um.

Segue a tentativa que tive.

 

unit Unit4;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs;

type
  TForm4 = class(TForm)
    ProcurarTXT: TButton;
    GerarTXT: TButton;
    procedure ProcurarTXTClick(Sender: TObject);
    procedure GerarTXTClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  var
    arquivo: TextFile;
    linha: string;
    caractere: char;
  public
    { Public declarations }
  end;

var
  Form4: TForm4;

implementation

{$R *.dfm}

procedure TForm4.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  CloseFile(arquivo);
end;

procedure TForm4.GerarTXTClick(Sender: TObject);

var
  i: integer;
  novoArquivo: TextFile;
begin
  AssignFile(novoArquivo, 'documento novo');
  Rewrite(novoArquivo);
  while not EOF(arquivo) do
  begin
    Read(arquivo, caractere);
    if EOLN(arquivo) then
    begin
      Readln(arquivo);
      Write(novoArquivo, caractere);
    end;
  end;
  CloseFile(novoArquivo);
end;

procedure TForm4.ProcurarTXTClick(Sender: TObject);

begin
  AssignFile(arquivo, 'documento antigo');
  reset(arquivo);
end;

end.

 

O problema é conseguir um meio dele percorrer e imprimir no novo .txt ao mesmo tempo, nas minhas tentativas eu consegui ou copiar o primeiro caractere de cada linha do txt ou o ultimo.

Postado
var
  i: integer;
  novoArquivo: TextFile;
begin
  AssignFile(novoArquivo, 'documento novo');
  Rewrite(novoArquivo);

  while not EOF(arquivo) do // enquando o ponteiro não estiver na última linha
  begin
  showmessage('Início de uma nova linha'); //nesse momento o ponteiro está no primeiro caractere

   //Read(arquivo, caractere);você está mandando ler o primeiro caracter da primeira linha?

    while not EOLN(arquivo) do // enquanto o ponteiro não estiver no final da linha
    begin
      Read(arquivo, caractere);
	  showmessage(caractere);
    end;

   ReadLn(arquivo, linha); // necessário para prosseguir com o ponteiro na próxima linha
  end;


  CloseFile(novoArquivo);
end;

 

utilize dois laços while...

 

O segundo while poderia ser alterado para ler direto a linha ao invés do arquivo...

 

 

  • Obrigado 1
Postado

Irei tentar @Fazzioni

@Fazzioni Acabei de colocar em prática o que você disse, fiz apenas uma modificação para imprimir os caracteres novo txt, que vai estar logo abaixo, contudo o novo arquivo está repetindo o ultimo caractere de todas as linhas mais de uma vez.

 

while not EOF(arquivo) do
  begin
    while not EOLN(arquivo) do
    begin
      Read(arquivo, caractere);
      Write(novoArquivo, caractere);
    end;
    ReadLn(arquivo, linha);
    Writeln(novoArquivo, caractere);
  end;
  CloseFile(novoArquivo);

Exemplo:

 

Arquivo Antigo      

                               

abcd                        

efgh                         

 

Novo Arquivo

 

abcdd

efghh

 

  • Curtir 1
  • Solução
Postado

 

19 horas atrás, SamuraiOcidental disse:

Acabei de colocar em prática o que você disse, fiz apenas uma modificação para imprimir os caracteres novo txt,que vai estar logo abaixo, contudo o novo arquivo está repetindo o ultimo caractere de todas as linhas mais de uma vez.

 

Arquivo Antigo      

                               

abcd                        

efgh                         

 

Novo Arquivo

 

abcdd

efghh

 

 

Segue abaixo a solução encontrada para corrigir o problema listado anteriormente:

 

  while not EOF(arquivo) do
  begin
    while not EOLN(arquivo) do
    begin
      Read(arquivo, caractere);
      Write(novoArquivo, caractere);
    end;
    ReadLn(arquivo);
    Writeln(novoArquivo);
  end;
  CloseFile(novoArquivo);

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!