Indexação de Arrays com o Clipper

Foto de Anderson

Saiba como ordenar qualquer vetor ou matriz com o Clipper!

Acredito que a forma mais comezinha para este tema seja através do primeiro preceito da lógica: a observação. Então observe:

Indexação de um array multidimensional (matriz)

Digamos que tivéssemos a seguinte matriz de 3 dimensões (matriz de 3 colunas):

aTST := { { "ANDERSON", "PROGRAMADOR",   23 },;
          { "LILIAN",   "UNIVERSITÁRIA", 22 },;
          { "ALADIAH",  "MILITAR",       59 } }

Se você quisesse indexar esta matriz por idade em ordem crescente:

aTST := aSORT( aTST,,,{|X,Y| X[3] < Y[3] } ) 

Por idade em ordem decrescente:

aTST := aSORT( aTST,,,{|X,Y| X[3] > Y[3] } ) 

Por profissão em ordem crescente:

aTST := aSORT( aTST,,,{|X,Y| X[2] < Y[2] } ) 

Por profissão em ordem decrescente:

aTST := aSORT( aTST,,,{|X,Y| X[2] > Y[2] } ) 

Por nome em ordem crescente:

aTST := aSORT( aTST,,,{|X,Y| X[1] < Y[1] } ) 

Por nome em ordem decrescente:

aTST := aSORT( aTST,,,{|X,Y| X[1] > Y[1] } ) 

Ok?! Vamos adiante!

Indexação de um array unidimensional (vetor)

Digamos que tivéssemos o seguinte vetor (matriz de 1 só coluna):

aTST2 := { "01002 11/10/99 REFIL P/ IMPRESS HP  35.00",;
           "01000 10/11/99 CX. DISQ. NASHUA      8.00",;
           "00101 01/07/99 PENTE 32MB SDRAM    188.00"}

Se você quisesse indexar por ordem de pedido crescente você já sabe! Normal:

aTST2 := aSORT( aTST2 ) 

Mas e por ordem decrescente do pedido?

aTST2 := aSORT( aTST2,,,{|X,Y| X > Y } ) 

E se você quisesse por data??? Em ordem crescente??? Nesse caso aí que é uma stringo só?

aTST2 := aSORT( aTST2,,,{|X,Y| CTOD(SUBSTR(X,7,8)) < CTOD(SUBSTR(Y,7,8)) } ) 

E por ordem decrescente???

aTST2 := aSORT( aTST2,,,{|X,Y| CTOD(SUBSTR(X,7,8)) > CTOD(SUBSTR(Y,7,8)) } ) 

Por nome do produto em ordem crescente?

aTST2 := aSORT( aTST2,,,{|X,Y| SUBSTR(X,17,20) < SUBSTR(Y,17,20) } ) 

Por nome do produto em ordem decrescente?

aTST2 := aSORT( aTST2,,,{|X,Y| SUBSTR(X,17,20) > SUBSTR(Y,17,20) } ) 

Por preço em ordem crescente?

aTST2 := aSORT( aTST2,,,{|X,Y| VAL(SUBSTR(X,36,7)) < VAL(SUBSTR(Y,36,7)) } ) 

Por preço em ordem decrescente?

aTST2 := aSORT( aTST2,,,{|X,Y| VAL(SUBSTR(X,36,7)) > VAL(SUBSTR(Y,36,7)) } ) 

Estes exemplos foram dados por mera ilustração. Desculpe se eu fui redundante demais para você, mas tem que ser assim mesmo... Por analogia você poderá indexar qualquer 'array' de qualquer forma que quiser!!!

Total votes: 0