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
- Retorno 0 = nao encontrado — sempre teste antes de fazer SubStr.
- Case-sensitive — normalize com Upper/Lower se necessario.
- Para extracao complexa (regex), AdvPL nao tem suporte nativo bom — considere combinacao At/SubStr/Separa.
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
cBusca | Character | sim | Substring procurada. |
cString | Character | sim | String onde procurar. |