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