função sortmerge() - caracter ou número
Enviado: 02 Fev 2016 21:49
Mesmo correndo o risco de "chover no molhado", precisei ordenar os caracteres em um campo e sem repetir nenhum, não achei função para isso e fiz uma que pode ajudar a alguém. Funciona assim:
a := '132'
b := sortmerge(a)
? b
'123' (sem as aspas)
ou
a := 132
b := sortmerge(a)
c := b + 1
? c
124
ou ainda
a := 1152233
b := sortmerge(a)
? b
1235
ou
a := 'Cada ideia mais estapafurdia...'
b := sortmerge(a)
? b
'.Cadefimprstu' (sem as aspas)
Sei lá se serve, rs... mas taí, tomara que sirva.
a := '132'
b := sortmerge(a)
? b
'123' (sem as aspas)
ou
a := 132
b := sortmerge(a)
c := b + 1
? c
124
ou ainda
a := 1152233
b := sortmerge(a)
? b
1235
ou
a := 'Cada ideia mais estapafurdia...'
b := sortmerge(a)
? b
'.Cadefimprstu' (sem as aspas)
Sei lá se serve, rs... mas taí, tomara que sirva.
Código: Selecionar todos
func sortmerge(cadeia)
loca i := 0
loca baguncado := {}
loca tmp := {}
loca sorteado := ''
loca xnum := .f.
if valtype(cadeia) = 'N'
ccadeia = alltrim(str(cadeia))
xnum = .t.
else
ccadeia = cadeia
endi
if len(ccadeia) = 0
if xnum
sorteado = 0 // será que tá certo fazer isso?!
else
sorteado = ''
endi
else
for i = 1 to len(ccadeia)
aadd(baguncado,subs(ccadeia,i,1))
next
tmp = asort(baguncado)
for i = 1 to len(tmp)
if at(tmp[i],sorteado) = 0
sorteado := sorteado+tmp[i]
endi
next
sorteado = alltrim(sorteado)
if xnum
sorteado = val(sorteado)
endi
endi
retu sorteado