Nesse vídeo demonstraremos a utilização da classe FWFileReader, que serve para abrir e realizar a leitura de um arquivo.
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
//Bibliotecas #Include "TOTVS.ch" /*/{Protheus.doc} User Function zExe217 Exemplo de função que realiza leituras de um arquivo @type Function @author Atilio @since 20/02/2023 @see https://tdn.totvs.com/display/public/framework/FWFileReader @obs **** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao **** /*/ User Function zExe217() Local aArea := FWGetArea() Local cArquivo := "C:\spool\curso\exemplo_query.sql" Local cConteudo := "" Local oFile /* Exemplo 1 - Fazendo a leitura do arquivo inteiro */ //Se o arquivo existir If File(cArquivo) //Tenta abrir o arquivo e pegar o conteudo oFile := FwFileReader():New(cArquivo) If oFile:Open() //Se deu certo abrir o arquivo, pega o conteudo e exibe cConteudo := oFile:FullRead() ShowLog(cConteudo) EndIf oFile:Close() EndIf /* Exemplo 2 - Fazendo a leitura do arquivo linha a linha */ //Se o arquivo existir If File(cArquivo) //Tenta abrir o arquivo e pegar o conteudo oFile := FwFileReader():New(cArquivo) If oFile:Open() //Pegando o total de linhas aLinhas := oFile:GetAllLines() nTotLinhas := Len(aLinhas) nLinhaAtu := 0 //Método GoTop não funciona (dependendo da versão da LIB), deve fechar e abrir novamente o arquivo oFile:Close() oFile := FWFileReader():New(cArquivo) oFile:Open() //Enquanto tiver linhas While (oFile:HasLine()) nLinhaAtu++ //Pega a linha atual e exibe cLinAtu := oFile:GetLine() ShowLog("Linha '" + cValToChar(nLinhaAtu) + "': " + cLinAtu) EndDo EndIf oFile:Close() EndIf FWRestArea(aArea) Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.
Muito bom! O vídeo foi bastante explicativo e fácil de entender.
Porém, surgiu uma dúvida: existe o FWFileReader para leitura de arquivos e o FWFileWriter para escrita. Mas, para editar um arquivo, há alguma classe como a FWFile ou é necessário usar as funções FT_?
Por exemplo, se eu criar o arquivo texto.txt, ao invés de apagar o conteúdo toda vez que a função for executada, seria possível concatenar o conteúdo?
Bom dia Kauan, tudo joia?
Sim, seria possível. A lógica seria mais ou menos a seguinte:
a. Se o arquivo já existir
b. Você pode ler o conteúdo do arquivo
c. E depois no final do arquivo você adiciona o texto
Ai para a lógica acima, você teria alguns cenários, dentre eles:
1. Não me lembro se na FWFileWriter, ela permite você abrir um arquivo e já popular o final dele, se sim, você pode tentar
2. Caso a FWFileWriter não permita você abrir o arquivo e já popular o final, leia o arquivo inteiro com a FWFileReader e depois incremente e grave com a FWFileWriter
3. Se o arquivo não passar de 64kb, você pode ler ele com a MemoRead, incrementar e depois usar a MemoWrite
Tenha uma ótima e abençoada quarta feira.
Um grande abraço.
Boa tarde, Daniel
Ótimo conteúdo!
Só me tira uma dúvida. Como trato essa classe para não ler linhas vazias (em branco)?
Bom dia Renato, tudo joia?
O que você poderia fazer, é logo após dar o GetLine, testar se ele tem conteúdo, algo mais ou menos assim:
Tenha uma ótima e abençoada quinta feira.
Um forte abraço.