Capital
Converte a primeira letra de cada palavra para maiuscula (Title Case). Usado em normalizacao de nomes, enderecos, descricoes pra impressao.
Assinatura: Capital(cString) -> cString
Retorna: Character
Capital aplica Title Case — primeira letra de cada palavra em maiuscula, resto em minuscula. E o jeito padrao do AdvPL pra normalizar nomes proprios e enderecos vindos de digitacao livre dos usuarios.
Sintaxe
Capital(cString) --> cString
Exemplos basicos
Capital("joao da silva") // "Joao Da Silva"
Capital("RUA DAS FLORES, 100") // "Rua Das Flores, 100"
Capital("EMPRESA TESTE LTDA") // "Empresa Teste Ltda"
Capital("") // ""
Capital("a") // "A"
Quando usar
- Normalizar nomes proprios antes de gravar — usuario digita "joao" mas voce quer "Joao".
- Impressao formal (relatorios, contratos) — nomes em CAIXA ALTA ficam agressivos.
- Display em UI — campos vindos do banco em CAIXA ALTA viram apresentaveis.
- Comparacao "fuzzy" — normaliza casamento de strings com case diferente.
Quando NAO usar
- Texto que deve preservar case — codigos, IDs, senhas.
- Email/URL — case importa em alguns sistemas.
- Conteudo do usuario que ja tem formatacao intencional (ex: "iPhone", "eBay").
Caso pratico: tela de cadastro
// Padrao: normalizar nome quando usuario sai do campo
User Function VldNome()
M->A1_NOME := Capital(AllTrim(M->A1_NOME))
// "JOAO DA SILVA" -> "Joao Da Silva"
Return .T.
Caso pratico: relatorio formal
// Tela de relatorio com nome do cliente normalizado
oReport:SetTitle("Demonstrativo - " + Capital(AllTrim(SA1->A1_NOME)))
Pegadinhas
- Articulos ficam maiusculos — "Joao Da Silva" em vez de "Joao da Silva". Em portugues formal, "da"/"de"/"do"/"das" deveriam ficar minusculas no meio do nome.
Capitalnao distingue. - Acentos dependem da codepage — em base com encoding errado, "Joao" pode virar "Joao" estranho. Cheque
SET LANGUAGE. - String vazia retorna vazia (nao da erro).
- Caracteres especiais ("&", "/") sao tratados como separador de palavra — "EMPRESA & CIA" vira "Empresa & Cia" mas a logica e por posicao, nao semantica.
- Pra title case mais inteligente (preposicoes em minusculo) — escreva helper proprio.
Helper "Capital inteligente"
Static Function CapitalPt(cTxt)
Local aMinusc := {"DA","DE","DO","DAS","DOS","E"}
Local aPal := Separa(Capital(cTxt), " ")
Local i
// Manter minusculas as preposicoes (exceto se for primeira palavra)
For i := 2 To Len(aPal)
If aScan(aMinusc, Upper(aPal[i])) > 0
aPal[i] := Lower(aPal[i])
EndIf
Next
Return Strjoin(aPal, " ")
Parâmetros
| Nome | Tipo | Obrigatório | Descrição |
|---|---|---|---|
cString | Character | sim | String a converter. |