Ir ao conteúdo
  • Cadastre-se

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


Ir à solução Resolvido por SamuraiOcidental,

Posts recomendados

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.

Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
Compartilhar em outros sites

  • Solução

 

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);

 

Link para o comentário
Compartilhar em outros sites

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