Função para validar nome de um arquivo txt em AdvPL

Se você precisa validar um nome de arquivo válido em AdvPL, eis uma função rápida e fácil.

Para usar essa função, basta fazer a chamada dela, passando por parâmetro o nome do arquivo, e automaticamente ela irá retornar um nome válido para esse arquivo.

Por exemplo, ao passar a string “Asdrubal / Corp.txt”, a função retornaria “Asdrubal  Corp.txt”.

Abaixo o código fonte desenvolvido.

//Bibliotecas
#Include "Protheus.ch"

/*/{Protheus.doc} zNameFile
Função que serve para retirar caracteres especiais para nome de arquivos
@author Atilio
@since 10/08/2018
@version 1.0
@param cString, characters, Nome do arquivo que será recomposto
@type function
@example //...
	cCaminho := "C:\spool\"
	cArquivo := SA1->A1_NREDUZ + ".txt"          //Teste | Cliente: 01.txt
	cCamFull := cCaminho + u_zNameFile(cArquivo) //Resultado será: C:\spool\Teste  Cliente 01.txt
	//...
@obs A função foi baseada no Windows, onde ao renomear um arquivo, não pode ser usado \ / : * ? " < > |
/*/

User Function zNameFile(cString)
	Local aArea      := GetArea()
	Local cStringNov := ""
	Local aSubstit   := {}
	Local nAtual     := 0
	Default cString  := ""
	
	//Se houver dados
	If ! Empty(cString)
		
		//Adiciona caracteres que serão retirados
		aAdd(aSubstit, '\')
		aAdd(aSubstit, '/')
		aAdd(aSubstit, ':')
		aAdd(aSubstit, '*')
		aAdd(aSubstit, '?')
		aAdd(aSubstit, '"')
		aAdd(aSubstit, '<')
		aAdd(aSubstit, '>')
		aAdd(aSubstit, '|')
		
		//Pega o conteúdo original e joga na nova variável
		cStringNov := cString
		
		//Percorre os dados
		For nAtual := 1 To Len(aSubstit)
			cStringNov := StrTran(cStringNov, aSubstit[nAtual], "")
		Next
	EndIf
	
	RestArea(aArea)
Return cStringNov

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.

Deixe uma resposta

Terminal de Informação