Boa noite Pessoal...
Preciso de uma ajuda com duas questões:
1a. Baseando-se na rotina abaixo:
SELECT linresul
DELETE ALL
PACK
APPEND FROM linresul.txt DELIMITED WITH CHARACTER "-"
GO vsor-1
SCATTER FIELDS linresul.d01,linresul.d02,linresul.d03,linresul.d04,linresul.d05,linresul.d06,linresul.d07,linresul.d08,linresul.d09,;
linresul.d10,linresul.d11,linresul.d12,linresul.d13,linresul.d14,linresul.d15 TO arr01
SELECT lifiltro
DELETE ALL
PACK
APPEND FROM linfingr.txt DELIMITED WITH CHARACTER "-"
replace ALL lifiltro.rep WITH 0
SELECT libackup
DELETE ALL
PACK
SELECT lifiltro
SET ORDER TO lifiltro
COUNT ALL TO vban
GO TOP
DO WHILE !EOF()
WAIT WINDOW "AGUARDE !!! Separando LINHAS CONFIGURADAS do arquivo em GRUPOS e suas REPETÊNCIAS... Registro "+ALLTRIM(STR(vreg))+" de "+ALLTRIM(STR(vban)) NOWAIT
SCATTER FIELDS lifiltro.d01,lifiltro.d02,lifiltro.d03,lifiltro.d04,lifiltro.d05,lifiltro.d06,lifiltro.d07,lifiltro.d08,lifiltro.d09,;
lifiltro.d10,lifiltro.d11,lifiltro.d12,lifiltro.d13,lifiltro.d14,lifiltro.d15 TO arr02
FOR i = 1 TO 15
var1 = arr01
FOR j = 1 TO 15
var2 = arr02[j]
IF var1 = var2
var3 = var3+1
ENDIF
ENDFOR
ENDFOR
IF var3>0
replace lifiltro.rep WITH var3
ENDIF
var1=0
var2=0
var3=0
IF !EOF()
SKIP
vreg=vreg+1
ELSE
EXIT
ENDIF
ENDDO
Reparem que tenho dois scatter's, ambos criando dois arrays, certo?
Nessa rotina, o FOR conta entre os dois arrays, as quantidades iguais, porém, um por um elemento até completar 15 e isso num arquivo com mais de 1 milhão de registros, fica muito demorado.
Pergunta:
Existe como fazer a contagem dos elementos sem usar o FOR, contando o conjunto por exemplo:
ARRAY01 terá os 15 elementos = 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
ARRAY02 terá outros 15 elementos = 01 02 03 04 05 06 07 08 09 10 11 12 13 14 16
Reparem que o FOR contaria os 15 elementos de cada array entre eles, encontrando 14 iguais entre os dois.
Tem como contar os elementos dos arrays sem utilizar o FOR, pegaria todo o conjunto do array01 e acharia os iguais no array02?
Com o FOR fica muito lento...
2a. Baseando-se que:
ARRAY03 terá os 15 elementos = 01 02 03 07 08 10 05 06 09 04 11 12 13 14 15
Como fazer para que esse array fique ordenado como segue = 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15?
Boa noite Pessoal...
Preciso de uma ajuda com duas questões:
1a. Baseando-se na rotina abaixo:
SELECT linresul
DELETE ALL
PACK
APPEND FROM linresul.txt DELIMITED WITH CHARACTER "-"
GO vsor-1
SCATTER FIELDS linresul.d01,linresul.d02,linresul.d03,linresul.d04,linresul.d05,linresul.d06,linresul.d07,linresul.d08,linresul.d09,;
linresul.d10,linresul.d11,linresul.d12,linresul.d13,linresul.d14,linresul.d15 TO arr01
SELECT lifiltro
DELETE ALL
PACK
APPEND FROM linfingr.txt DELIMITED WITH CHARACTER "-"
replace ALL lifiltro.rep WITH 0
SELECT libackup
DELETE ALL
PACK
SELECT lifiltro
SET ORDER TO lifiltro
COUNT ALL TO vban
GO TOP
DO WHILE !EOF()
WAIT WINDOW "AGUARDE !!! Separando LINHAS CONFIGURADAS do arquivo em GRUPOS e suas REPETÊNCIAS... Registro "+ALLTRIM(STR(vreg))+" de "+ALLTRIM(STR(vban)) NOWAIT
SCATTER FIELDS lifiltro.d01,lifiltro.d02,lifiltro.d03,lifiltro.d04,lifiltro.d05,lifiltro.d06,lifiltro.d07,lifiltro.d08,lifiltro.d09,;
lifiltro.d10,lifiltro.d11,lifiltro.d12,lifiltro.d13,lifiltro.d14,lifiltro.d15 TO arr02
FOR i = 1 TO 15
var1 = arr01
FOR j = 1 TO 15
var2 = arr02[j]
IF var1 = var2
var3 = var3+1
ENDIF
ENDFOR
ENDFOR
IF var3>0
replace lifiltro.rep WITH var3
ENDIF
var1=0
var2=0
var3=0
IF !EOF()
SKIP
vreg=vreg+1
ELSE
EXIT
ENDIF
ENDDO
Reparem que tenho dois scatter's, ambos criando dois arrays, certo?
Nessa rotina, o FOR conta entre os dois arrays, as quantidades iguais, porém, um por um elemento até completar 15 e isso num arquivo com mais de 1 milhão de registros, fica muito demorado.
Pergunta:
Existe como fazer a contagem dos elementos sem usar o FOR, contando o conjunto por exemplo:
ARRAY01 terá os 15 elementos = 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15
ARRAY02 terá outros 15 elementos = 01 02 03 04 05 06 07 08 09 10 11 12 13 14 16
Reparem que o FOR contaria os 15 elementos de cada array entre eles, encontrando 14 iguais entre os dois.
Tem como contar os elementos dos arrays sem utilizar o FOR, pegaria todo o conjunto do array01 e acharia os iguais no array02?
Com o FOR fica muito lento...
2a. Baseando-se que:
ARRAY03 terá os 15 elementos = 01 02 03 07 08 10 05 06 09 04 11 12 13 14 15
Como fazer para que esse array fique ordenado como segue = 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15?
Compartilhar este post
Link para o post
Compartilhar em outros sites