Forum > Portuguese

Dúvida: Extrair o nome de um arquivo a partir do arquivo.

(1/1)

elender:
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  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---Memo1.Clear; // Limpa o conteúdo do Memo1  AssignFile(arquivo, Edit1.Text); // Associa a variável arquivo ao arquivo externo informado pelo usuário  {$I-}              // desativa a diretiva de Input  Reset(arquivo);   //  Abre o arquivo texto para leitura  {$I+}             //  ativa a diretiva de Input  if (IOResult <> 0) // verifica o resultado da operação de abertura     then Memo1.Lines.Add('Erro na abertura do arquivo !!!')  // Se der erro na abertura, informa  else begin         while (not eoln(arquivo)) do // verifica se o ponteiro de arquivo atingiu a marca de final de linha         begin           read(arquivo, ConteudoDaLinha); // Lê a primeira Linha do arquivo . O conteúdo lido é transferido para a variável ConteudoDaLinha           Memo1.Lines.Add(ConteudoDaLinha);           RenameFile(arquivo, ConteudoDaLinha)               

lucamar:
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  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---var  NomeOriginal: String;{ ... }NomeOriginal := TextRec(arquivo).Name;RenameFile(NomeOriginal, ConteudoDaLinha);{ ... }
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  [+][-]window.onload = function(){var x1 = document.getElementById("main_content_section"); if (x1) { var x = document.getElementsByClassName("geshi");for (var i = 0; i < x.length; i++) { x[i].style.maxHeight='none'; x[i].style.height = Math.min(x[i].clientHeight+15,306)+'px'; x[i].style.resize = "vertical";}};} ---var  NomeOriginal: String;{ ... }  Memo1.Clear; // Limpa o conteúdo do Memo1  NomeOriginal := Edit1.Text;  AssignFile(arquivo, Nomeoriginal); // Associa a variável arquivo ao arquivo externo informado pelo usuário  {$I-}              // desativa a diretiva de Input  Reset(arquivo);   //  Abre o arquivo texto para leitura  {$I+}             //  ativa a diretiva de Input  if (IOResult <> 0) // verifica o resultado da operação de abertura     then Memo1.Lines.Add('Erro na abertura do arquivo !!!')  // Se der erro na abertura, informa  else begin         while (not eoln(arquivo)) do // verifica se o ponteiro de arquivo atingiu a marca de final de linha         begin           read(arquivo, ConteudoDaLinha); // Lê a primeira Linha do arquivo . O conteúdo lido é transferido para a variável ConteudoDaLinha           Memo1.Lines.Add(ConteudoDaLinha);           RenameFile(NomeOriginal, ConteudoDaLinha){...}
traduzido pelo tradutor google, desculpe os erros :-[

Navigation

[0] Message Index

Go to full version