Visual FoxPro

Fechado
Markleber Posts 2 Data de inscrição segunda 27 de agosto de 2018 Status Membro Última visita terça 28 de agosto de 2018 - 27 ago 2018 às 21:18
Markleber Posts 2 Data de inscrição segunda 27 de agosto de 2018 Status Membro Última visita terça 28 de agosto de 2018 - 28 ago 2018 às 08:21
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[i]
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?

1 Respostas

Perfil bloqueado
28 ago 2018 às 04:50
Oi

Talvez esta página do suporte da Microsoft te ajude, ou esta.
1
Markleber Posts 2 Data de inscrição segunda 27 de agosto de 2018 Status Membro Última visita terça 28 de agosto de 2018
28 ago 2018 às 08:21
Bom dia, acho que você não entendeu o que estou querendo, ou então, eu não entendi nada nos artigos que você me indicou. Não tem nada sobre arrays...
0

Assine nossa newsletter!

Assine nossa newsletter!
Junte-se à comunidade