Separa

Split de string em array por separador. Equivalente do .split() de outras linguagens. Util pra parser CSV simples, parse de codigo composto.

Assinatura: Separa(cString, cSep, [lTratar]) -> aPartes

Retorna: Array of Character

Separa e o "split" do AdvPL. Recebe string + separador, devolve array com as partes. Indispensavel pra processar CSVs simples, codigos compostos (FILIAL/COD/LOJA), URLs.

Sintaxe

Separa(cString, cSep, lTratar) --> aPartes
//   cString  - string a dividir
//   cSep     - delimitador (1 char tipico, mas aceita strings)
//   lTratar  - .T. = remove espacos extras de cada parte (opcional, default .F.)

Exemplos basicos

aPart := Separa("a,b,c", ",")
// aPart = {"a", "b", "c"}

aPart := Separa("filial/cliente/loja", "/")
// aPart = {"filial", "cliente", "loja"}

aPart := Separa("nome   ,   sobrenome  ", ",", .T.)
// aPart = {"nome", "sobrenome"}  (com lTratar=.T. faz AllTrim em cada)

aPart := Separa("semSeparador", ",")
// aPart = {"semSeparador"}  (1 elemento — string inteira)

Casos praticos

1. Parser de CSV simples (sem aspas)

User Function ImpCSV(cArq)
    Local cConteudo := MemoRead(cArq)
    Local aLinhas   := Separa(cConteudo, Chr(10))
    Local aCampos
    Local i

    For i := 1 To Len(aLinhas)
        If !Empty(aLinhas[i])
            aCampos := Separa(aLinhas[i], ";", .T.)
            // aCampos[1]=codigo, [2]=nome, [3]=qtd
            U_IncluiProd(aCampos[1], aCampos[2], Val(aCampos[3]))
        EndIf
    Next
Return

2. Parser de email

cEmail := "joao.silva@empresa.com.br"
aPartes := Separa(cEmail, "@")
cUser   := aPartes[1]   // "joao.silva"
cDom    := aPartes[2]   // "empresa.com.br"

// Subdominios
aSub := Separa(cDom, ".")
// aSub = {"empresa", "com", "br"}

3. Path absoluto pra partes

cPath := "/var/protheus/system/sigamat.emp"
aPartes := Separa(cPath, "/")
// aPartes = {"", "var", "protheus", "system", "sigamat.emp"}
// note o "" inicial — path absoluto comeca com /

4. Lista de emails copiar (CC)

cDestinatarios := "joao@a.com;maria@b.com;pedro@c.com"
aEmails := Separa(cDestinatarios, ";", .T.)
For i := 1 To Len(aEmails)
    SendMail(..., aEmails[i], ...)
Next

Quando NAO usar

Pegadinhas

Parâmetros

NomeTipoObrigatórioDescrição
cStringCharactersimString a dividir.
cSepCharactersimSeparador (1 ou mais chars).
lTratarLogicalnão.T. aplica AllTrim em cada parte.

Veja também