Visual FoxPro

Markleber
Posts
2
Data de inscrição
segunda 27 de agosto de 2018
Última visita
terça 28 de agosto de 2018
- 27 ago 2018 às 21:18 - Última resposta: Markleber
Posts
2
Data de inscrição
segunda 27 de agosto de 2018
Ú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?
Ver mais 

2 respostas

Melhor resposta
Ana Spadari
Posts
33191
Data de inscrição
quinta 12 de março de 2009
Status
Moderador
Última visita
terça 13 de novembro de 2018
- 28 ago 2018 às 04:50
1
Obrigado
Oi

Talvez esta página do suporte da Microsoft te ajude, ou esta.
Ana Spadari

Community Manager - CCM Brasil

Markleber
Posts
2
Data de inscrição
segunda 27 de agosto de 2018
Ú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...
Comentar a resposta do Ana Spadari