FWFileWriter

Classe para criar um arquivo e popular incrementalmente

Exemplo da Rotina:

oFWriter := FWFileWriter():New("Caminho do arquivo", .T.)
oFWriter:Write('')
oFWriter:Close()

Exemplo 1- Escrevendo um texto simples:

#Include "Protheus.ch"

User Function zTstTxt()
	Local cPasta   := ""
	Local cArquivo := ""
	
	//Define a pasta como a temporária do S.O. e o nome do arquivo como teste1
	cPasta   := GetTempPath()
	cArquivo := "teste1.txt"
	
	//Chama a criação da classe
	oFWriter := FWFileWriter():New(cPasta + cArquivo, .T.)
	
	//Se houve falha ao criar, mostra a mensagem
	If ! oFWriter:Create()
		MsgStop("Houve um erro ao gerar o arquivo: " + CRLF + oFWriter:Error():Message, "Atenção")
		
	//Senão, continua com o processamento
	Else
		
		//Escreve uma frase qualquer no arquivo
		oFWriter:Write('Hello World' + CRLF)
		
		//Encerra o arquivo
		oFWriter:Close()
		
		//Pergunta se deseja abrir o arquivo
		If MsgYesNo("Arquivo gerado com sucesso (" + cPasta + cArquivo + ")!" + CRLF + "Deseja abrir?", "Atenção")
			ShellExecute("OPEN", cArquivo, "", cPasta, 1 )
		EndIf
	EndIf

Return

Exemplo 2- Escrevendo os dados de uma query:

#Include "Protheus.ch"
#Include "TopConn.ch"

User Function zTstTxt()
	Local cPasta   := ""
	Local cArquivo := ""
	Local cQuery   := ""
	Local cLinha   := ""
	
	//Define a pasta como a temporária do S.O. e o nome do arquivo como teste1
	cPasta   := GetTempPath()
	cArquivo := "teste2.txt"
	
	//Chama a criação da classe
	oFWriter := FWFileWriter():New(cPasta + cArquivo, .T.)
	
	//Se houve falha ao criar, mostra a mensagem
	If ! oFWriter:Create()
		MsgStop("Houve um erro ao gerar o arquivo: " + CRLF + oFWriter:Error():Message, "Atenção")
		
	//Senão, continua com o processamento
	Else
		
		//Monta a query
		cQuery := " SELECT "                                        + CRLF
		cQuery += "     BM_GRUPO, BM_DESC "                         + CRLF
		cQuery += " FROM "                                          + CRLF
		cQuery += "     " + RetSQLName('SBM') + " SBM "             + CRLF
		cQuery += " WHERE "                                         + CRLF
		cQuery += " 	BM_FILIAL = '" + FWxFilial('SBM') + "' "    + CRLF
		cQuery += " 	AND SBM.D_E_L_E_T_ = ' ' "                  + CRLF
		TCQuery cQuery New Alias "QRY_SBM"
		
		//Enquanto houver dados
		While ! QRY_SBM->(EoF())
			//Monta a linha que será escrita
			cLinha := ""
			cLinha += QRY_SBM->BM_GRUPO + ";"
			cLinha += QRY_SBM->BM_DESC  + ";"
			
			//Escreve a linha com a quebra do CRLF no fim
			oFWriter:Write(cLinha + CRLF)
			
			QRY_SBM->(DbSkip())
		EndDo
		QRY_SBM->(DbCloseArea())
		
		//Encerra o arquivo
		oFWriter:Close()
		
		//Pergunta se deseja abrir o arquivo
		If MsgYesNo("Arquivo gerado com sucesso (" + cPasta + cArquivo + ")!" + CRLF + "Deseja abrir?", "Atenção")
			ShellExecute("OPEN", cArquivo, "", cPasta, 1 )
		EndIf
	EndIf

Return

Observações:

– Caso tenha dúvidas ou problemas com os exemplos, entre em contato;

– Se tiver sugestões de rotinas, pode entrar em contato;

Referências:

TDN