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.