Lendo arquivos através da FWFileReader – Maratona AdvPL e TL++ 217

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.

Dan (Daniel Atilio)
Cristão de ramificação protestante. Especialista em Engenharia de Software pela FIB, graduado em Banco de Dados pela FATEC Bauru e técnico em informática pelo CTI da Unesp. Entusiasta de soluções Open Source e blogueiro nas horas vagas. Autor e mantenedor do portal Terminal de Informação.

2 Responses

  1. Kauan Santana disse:

    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.

Deixe uma resposta

Terminal de Informação