Recent

Author Topic: Dúvida: Extrair o nome de um arquivo a partir do arquivo.  (Read 2481 times)

elender

  • New Member
  • *
  • Posts: 35
Dúvida: Extrair o nome de um arquivo a partir do arquivo.
« 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.  


« Last Edit: December 06, 2020, 01:04:30 am by elender »

lucamar

  • Hero Member
  • *****
  • Posts: 4219
Re: Dúvida: Extrair o nome de um arquivo a partir do arquivo.
« Reply #1 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 :-[
« Last Edit: December 06, 2020, 03:23:58 pm by lucamar »
Turbo Pascal 3 CP/M - Amstrad PCW 8256 (512 KB !!!) :P
Lazarus/FPC 2.0.8/3.0.4 & 2.0.12/3.2.0 - 32/64 bits on:
(K|L|X)Ubuntu 12..18, Windows XP, 7, 10 and various DOSes.

 

TinyPortal © 2005-2018