begin process at 2010 07 29 20:56:52
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Foxpro

 > 

Divers

 > 

Débutant(e)

 > 

OPTIMISATION de code


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

OPTIMISATION de code

mercredi 30 septembre 2009 à 16:56:40 | OPTIMISATION de code

Django1

Bonjour,

J'aimerai avoir un exemple de code pour éviter le REPLACE ALL qui fait défiler tout les enregistrements.
J'ai entendu parler d'un codage qui travail ligne par ligne et non colonne par colonne.

Voilà un petit exemple de code utiliser (j'utilise des .prg pas de form) :


(Tout les champs sont en char)

REPLACE ALL NUMCARTE WITH NO_CM
REPLACE ALL NUMCARTE WITH '2090000000009' FOR ALLTRIM (NUMCARTE) = ''
REPLACE ALL CODEBARRE WITH ALLTRIM (NO_CODE49)
REPLACE ALL MAG_NUM WITH ALLTRIM (SUBSTR (vNUM_MAG,2,2)) FOR LEFT (vNUM_MAG,1) = '0'
REPLACE ALL MAG_NUM WITH ALLTRIM (SUBSTR (vNUM_MAG,3,1)) FOR LEFT (vNUM_MAG,2) = '00'
REPLACE ALL MAG_NUM WITH ALLTRIM (vNUM_MAG) FOR LEFT (vNUM_MAG,1) <> '0'
REPLACE ALL PAYS WITH '' FOR PAYS = 'FRANCE'

Merci de vos réponses
mercredi 30 septembre 2009 à 20:05:10 | Re : OPTIMISATION de code

MichelAtoutFox

Membre Club
Réponse acceptée !
Bonjour,

Je ne comprends pas ce que tu veux dire: "ligne par ligne" ou "faire défiler tous les enregistrements", c'est la même chose.

Ce que tu peux faire, si tu dois faire un replace sur une table pour plusieurs champs avec la même condition FOR, c'est écrire REPLACE champ1 WITH savaleur1, champ2 WITH savaleur2, ... FOR ...

si ton code est réellement ce que tu nous montres, alors tu ne gagneras rien à utiliser une syntaxe différente (UPDATE matable SET...).

Mais tu peux améliorer ton code, en regardant la syntaxe de EMPTY pour remplacer ton alltrim='', et aussi en utilisant des variables préfixées, et aussi en regardant le == à la place du = (surtout si tu ne nous précises pas ton SET NEAR et ton SET EXACT).

Alors, quel est ton code réel, et quel est ton problème?
(et ta version de VFP?)
jeudi 1 octobre 2009 à 09:11:35 | Re : OPTIMISATION de code

Django1

Bonjour et merci de l'interet porté,

Donc oui c'est mon code réel, la question est que pour une table de 10 000 enregistrements tout fonctionne bien mais si je passe sur une table de 150 000 enregistrements là ça rame, c'est pour cela que j'aurais voulu optimiser mon code.
En ce qui concerne le SET NEAR et SET EXACT je ne sais pas utiliser (100% 'je me débrouille comme je peux', pas de formation de dev juste de l'intution en parcourant internet) donc je prend toutes les infos.

Merci
jeudi 1 octobre 2009 à 17:47:54 | Re : OPTIMISATION de code

AbaqueInside

Réponse acceptée !
Bonjour

Tu peux faire tous les REPLACE sans FOR en une seule instruction

REPLACE ALL NUMCARTE WITH NO_CM, CODEBARRE WITH ALLTRIM (NO_CODE49) && parcourt toute la table une seule fois

Pour les REPLACE FOR, si l'expression de filtre correspond à l'expression d'un index, REPLACE trouve directement les enrgistrements à modifier sans balayer la table (technologie d'optimisation Rushmore)
Note : avec REPLACE FOR, la clause ALL est inutile

En clair, pour optimiser
REPLACE ALL NUMCARTE WITH '2090000000009' FOR ALLTRIM (NUMCARTE) = ''
il faut écrire
REPLACE NUMCARTE WITH '2090000000009' FOR Empty(NUMCARTE)
et que la table correspondante ait un index regular (ou mieux binary avec VFP >=8) sur Empty(NUMCARTE)
INDEX ON Empty(NUMCARTE) TAG NUMCARTE_E BINARY

Même principe pour les autres conditions FOR
REPLACE MAG_NUM WITH ALLTRIM (SUBSTR (vNUM_MAG,2,2)) FOR LEFT (vNUM_MAG,1) = '0'
INDEX ON LEFT (vNUM_MAG,1) TAG vNUM_MAG1

REPLACE MAG_NUM WITH ALLTRIM (SUBSTR (vNUM_MAG,3,1)) FOR LEFT (vNUM_MAG,2) = '00'
INDEX ON LEFT (vNUM_MAG,2) TAG vNUM_MAG2

REPLACE MAG_NUM WITH ALLTRIM (vNUM_MAG) FOR LEFT (vNUM_MAG,1) <> '0'
INDEX ON LEFT (vNUM_MAG,1) TAG vNUM_MAG1 && cf. ci-dessus

REPLACE ALL PAYS WITH '' FOR PAYS = 'FRANCE'
INDEX ON PAYS TAG PAYS && cf. ci-dessus

Communauté Francophone des Professionnels FoxPro
news://news.AtoutFox.org/AtoutFox.association
www.AtoutFox.org
vendredi 2 octobre 2009 à 14:11:30 | Re : OPTIMISATION de code

Django1

Merci beaucoup pour ton aide
vendredi 2 octobre 2009 à 14:52:49 | Re : OPTIMISATION de code

AbaqueInside

De rien ... ;-)

Tu peux aussi éviter un index et un REPLACE FOR en groupant les deux REPLACE MAG_NUM

REPLACE ALL NUMCARTE WITH NO_CM;
, CODEBARRE WITH ALLTRIM (NO_CODE49);
, MAG_NUM WITH Iif(LEFT (vNUM_MAG,1) = '0';
, ALLTRIM(SUBSTR(vNUM_MAG,2,2));
, ALLTRIM (SUBSTR (vNUM_MAG,3,1));
)

Communauté Francophone des Professionnels FoxPro
news://news.AtoutFox.com/AtoutFox.public.association
www.AtoutFox.org


Cette discussion est classée dans : replace, with, all, mag, vnum


Répondre à ce message

Sujets en rapport avec ce message

modification d'une table [ par slimvir ] bonjour, j'utilise ce code pour modifier une ligne d'une table mais cette ligne ne se modifier mais elle s'ajoute ?? merciSELECT table1replace Codcli Un message aux experts Visual Fox Pro " au secours svp " [ par NabilZip ] Bonjour Tout le monde , J'aurais besoin de votre aide , vous developpeurs .voilà , j'ai ce code : <span lang="EN-GB" style="FONT-SI Gestion multifichiers [ par gh57 ] Quel est la commande qui permets d'effectuer une mise à jour d'un fichier(dbf) avec celui d'un autre.J'ai essayé la commande :UPDATE ON champ FROM ali exportation .dbf vers fichier texte délimités ! [ par rubix2 ] p'tite question, j'ai VFP6. Je voudrais exporter ma table .dbf en texte délimité par un point virgule. Mais en utilisant l'assistant d'exportation de


Nos sponsors


Sondage...

CalendriCode

Juillet 2010
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,499 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales