Lazarus

Other Languages => Portuguese => Topic started by: elender on December 06, 2020, 12:56:21 am

Title: Dúvida: Extrair o nome de um arquivo a partir do arquivo.
Post by: elender on December 06, 2020, 12:56:21 am
Tenho uma lista grande de arquivos txt. Preciso pegar o conteúdo da primeira linha do arquivo e renomear o arquivo para que o nome passe a corresponder ao conteúdo.

Para poder renomear cada arquivo, eu preciso obter o nome de cada um.

Para isso o fpc já possui uma função embutida chamada ExtractFilename.

Mas existe um problema. Ela só aceita strings como argumento. E meu arquivo é do tipo text (TextFile).

Ainda não encontrei nenhuma forma de converter text em string, e eu não terei o nome do arquivo de antemão.

Eis basicamente o que estou fazendo:


Code: Pascal  [Select][+][-]
  1. Memo1.Clear; // Limpa o conteúdo do Memo1
  2.   AssignFile(arquivo, Edit1.Text); // Associa a variável arquivo ao arquivo externo informado pelo usuário
  3.   {$I-}              // desativa a diretiva de Input
  4.   Reset(arquivo);   //  Abre o arquivo texto para leitura
  5.   {$I+}             //  ativa a diretiva de Input
  6.   if (IOResult <> 0) // verifica o resultado da operação de abertura
  7.      then Memo1.Lines.Add('Erro na abertura do arquivo !!!')  // Se der erro na abertura, informa
  8.   else begin
  9.          while (not eoln(arquivo)) do // verifica se o ponteiro de arquivo atingiu a marca de final de linha
  10.          begin
  11.            read(arquivo, ConteudoDaLinha); // Lê a primeira Linha do arquivo . O conteúdo lido é transferido para a variável ConteudoDaLinha
  12.            Memo1.Lines.Add(ConteudoDaLinha);
  13.            RenameFile(arquivo, ConteudoDaLinha)
  14.            
  15.  
  16.  
  17.  


Title: Re: Dúvida: Extrair o nome de um arquivo a partir do arquivo.
Post by: lucamar on December 06, 2020, 03:20:07 pm
Os tipos de arquivo são, por baixo, simplesmente um registro que você pode acessar e um dos campos desse registro é o nome do arquivo:

Code: Pascal  [Select][+][-]
  1. var
  2.   NomeOriginal: String;
  3. { ... }
  4. NomeOriginal := TextRec(arquivo).Name;
  5. RenameFile(NomeOriginal, ConteudoDaLinha);
  6. { ... }

Mas você realmente não precisa disso: você já tem o nome que usou para o Assign(). Armazene-o em uma variável e você pode usá-lo sempre que achar necessário:

Code: Pascal  [Select][+][-]
  1. var
  2.   NomeOriginal: String;
  3. { ... }
  4.   Memo1.Clear; // Limpa o conteúdo do Memo1
  5.   NomeOriginal := Edit1.Text;
  6.   AssignFile(arquivo, Nomeoriginal); // Associa a variável arquivo ao arquivo externo informado pelo usuário
  7.   {$I-}              // desativa a diretiva de Input
  8.   Reset(arquivo);   //  Abre o arquivo texto para leitura
  9.   {$I+}             //  ativa a diretiva de Input
  10.   if (IOResult <> 0) // verifica o resultado da operação de abertura
  11.      then Memo1.Lines.Add('Erro na abertura do arquivo !!!')  // Se der erro na abertura, informa
  12.   else begin
  13.          while (not eoln(arquivo)) do // verifica se o ponteiro de arquivo atingiu a marca de final de linha
  14.          begin
  15.            read(arquivo, ConteudoDaLinha); // Lê a primeira Linha do arquivo . O conteúdo lido é transferido para a variável ConteudoDaLinha
  16.            Memo1.Lines.Add(ConteudoDaLinha);
  17.            RenameFile(NomeOriginal, ConteudoDaLinha)
  18. {...}


traduzido pelo tradutor google, desculpe os erros :-[
TinyPortal © 2005-2018