Asc/Chr

Conversao caractere <-> codigo ASCII. Asc retorna o codigo de um caractere; Chr retorna o caractere do codigo. Essenciais pra manipular caracteres especiais (quebra de linha, tab).

Assinatura: Asc(cChar) -> nCodigo // Chr(nCodigo) -> cChar

Retorna: Numeric (Asc) / Character (Chr)

Dupla classica de conversao caractere-codigo. Em AdvPL voce nao tem caractere literal como em outras linguagens (sem escape \n) — precisa usar Chr(10) pra LF, Chr(13) pra CR.

Sintaxe

Asc(cChar)    --> nCodigo    // numero ASCII (0-255)
Chr(nCodigo)  --> cChar      // caractere correspondente

Tabela de caracteres uteis

CodigoCharUso
9TABChr(9) — separador de campo TSV
10LFChr(10) — quebra de linha Unix
13CRChr(13) — retorno de carro
13+10CRLFChr(13)+Chr(10) — quebra Windows
32espacoChr(32) — espaco em branco
34"Chr(34) — aspas dupla (em string literal)
39'Chr(39) — aspas simples
65AMaiusculas começam em 65
97aMinusculas começam em 97

Exemplos

// Asc — caractere pra numero
Asc("A")                  // 65
Asc("a")                  // 97
Asc("0")                  // 48
Asc(" ")                  // 32

// Chr — numero pra caractere
Chr(65)                   // "A"
Chr(97)                   // "a"
Chr(48)                   // "0"

Casos praticos

1. Quebra de linha em string (Windows)

// CRLF — padrao Windows pra texto
cTexto := "Linha 1" + Chr(13) + Chr(10) + "Linha 2"
MemoWrite("\spool\arq.txt", cTexto)

// Variavel constante (mais legivel)
#define CRLF Chr(13) + Chr(10)
cTexto := "Linha 1" + CRLF + "Linha 2"

2. Validar se char e letra

Static Function EhLetra(cChar)
    Local n := Asc(Upper(cChar))
Return n >= 65 .And. n <= 90  // A-Z apos Upper

3. Validar se char e digito

Static Function EhDigito(cChar)
    Local n := Asc(cChar)
Return n >= 48 .And. n <= 57  // 0-9

4. Aspas em string literal (clipper-style)

// Como inserir aspas dentro de string?
// Opcao 1: alternar aspas
cMsg := 'Cliente disse "ola"'

// Opcao 2: Chr(34) (quando precisa misturar)
cMsg := "Cliente disse " + Chr(34) + "ola" + Chr(34)

5. Remover caracteres especiais (TAB, CR, LF)

cTxt := StrTran(cTxt, Chr(9), " ")     // TAB -> espaco
cTxt := StrTran(cTxt, Chr(13), "")     // remove CR
cTxt := StrTran(cTxt, Chr(10), "")     // remove LF

Pegadinhas

Veja também