RAt

Retorna a posicao da ULTIMA ocorrencia de cBusca dentro de cString. Equivalente de At() de tras pra frente. Util pra extrair extensao de arquivo, ultimo nome de path.

Assinatura: RAt(cBusca, cString) -> nPos

Retorna: Numeric

RAt (Reverse At) busca de tras pra frente — retorna a posicao da ultima ocorrencia da substring. Tipico em parsing de path/arquivo onde voce quer pegar extensao ou nome final.

Sintaxe

RAt(cBusca, cString) --> nPos

Exemplos

RAt(".", "arquivo.txt.bak")     // 12 (ultimo ponto)
RAt(".", "arquivo")              // 0  (nao tem)
RAt("/", "/usr/local/bin")      // 11 (ultima barra)
RAt(" ", "Joao da Silva")       // 8  (espaco antes de Silva)

Casos praticos

1. Extrair extensao de arquivo

Static Function PegaExt(cArq)
    Local nPos := RAt(".", cArq)
    If nPos > 0
        Return Lower(SubStr(cArq, nPos + 1))
    EndIf
Return ""

? PegaExt("relatorio.pdf")     // "pdf"
? PegaExt("foto.JPG")           // "jpg"
? PegaExt("backup.tar.gz")      // "gz"
? PegaExt("semExtensao")        // ""

2. Extrair nome do arquivo de um path

Static Function PegaNomeArq(cPath)
    Local nPos := RAt("\\", cPath)   // Windows: \
    If nPos == 0
        nPos := RAt("/", cPath)        // Unix-like
    EndIf
    If nPos > 0
        Return SubStr(cPath, nPos + 1)
    EndIf
Return cPath

? PegaNomeArq("\spool\nfe\123.xml")   // "123.xml"
? PegaNomeArq("123.xml")                  // "123.xml"

3. Extrair sobrenome

Static Function PegaSobrenome(cNome)
    Local nPos := RAt(" ", AllTrim(cNome))
    If nPos > 0
        Return SubStr(cNome, nPos + 1)
    EndIf
Return ""

? PegaSobrenome("Joao da Silva")    // "Silva"
? PegaSobrenome("Joao")             // ""

Pegadinhas

Parâmetros

NomeTipoObrigatórioDescrição
cBuscaCharactersimSubstring procurada.
cStringCharactersimString onde procurar.

Veja também