função sortmerge() - caracter ou número

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

rmlazzari
Usuário Nível 2
Usuário Nível 2
Mensagens: 64
Registrado em: 09 Dez 2013 14:18
Localização: são paulo

função sortmerge() - caracter ou número

Mensagem por rmlazzari »

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.

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
Responder