Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

  • 0
Markleber

Arrays em Visual FoxPro

Pergunta

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

0 respostas a esta questão

Recommended Posts

Até agora não há respostas para essa pergunta


×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.