PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → problème aec la suppression des doublons
problème aec la suppression des doublons
Débuté par i.belkaid, 16 nov. 2005 13:33 - 13 réponses
Posté le 16 novembre 2005 - 13:33
salut,
j'ai un fichier HF de 5 millions d'enregistrementset j'ai une clé (DCN) qui est en plusieurs doubles.
donc pour régler ce probleme j'ai essayé le code suivant:

HLitPremier(immeuble,DCN)
TANTQUE PAS HEnDehors(immeuble)
HModifie(immeuble)
SI HErreurDoublon() ALORS

HSupprime(immeuble)
FIN
HLitSuivant(immeuble,DCN)
FIN

donc en exécutant, à chaque suppression de doublons il ya un message d'erreur qui s'affiche et je dois valider NON pour que ca supprime le doublons.
le probleme c'est qu'il ya beaucoup d'enregistrement :).
est ce que quelqu'un peut m'aider SVP? MERCI d'avance
Posté le 16 novembre 2005 - 15:20
Il se trouve que issam a formulé :
salut,
j'ai un fichier HF de 5 millions d'enregistrementset j'ai une clé (DCN) qui
est en plusieurs doubles. donc pour régler ce probleme j'ai essayé le code
suivant:

HLitPremier(immeuble,DCN)
TANTQUE PAS HEnDehors(immeuble)
HModifie(immeuble)
SI HErreurDoublon() ALORS

HSupprime(immeuble)
FIN
HLitSuivant(immeuble,DCN)
FIN

donc en exécutant, à chaque suppression de doublons il ya un message d'erreur
qui s'affiche et je dois valider NON pour que ca supprime le doublons. le
probleme c'est qu'il ya beaucoup d'enregistrement :). est ce que quelqu'un
peut m'aider SVP? MERCI d'avance


Salut,
J'ai une requete SQL qui permet de visualiser les enregistrements en
double. J'espère que ca pourra t'aider.

select IDUNIQUE,count(IDUNIQUE)
from monfichier group by IDUNIQUE
having count(*)>1

Dans le même style, mais avec suppression automatique des enreg en
double (attention elle prend un certain temps si bcp d'enreg)

DELETE FROM monfichier WHERE IDUNIQUE IN
(select IDUNIQUE
from monfichier group by IDUNIQUE
having count(*)>1)

Par contre, je crois que la requete supprime TOUS les enreg en double !




--
Bon développement à tous
Christian

cciochir@ _ at _ cmii.fr
Posté le 16 novembre 2005 - 15:37
effectivement ca permet de supprimer tous les enregistrements en double par contre pour mon cas je dois garder un seul enregistrement parmi ceux qui sont en doubles.
si vous pouvez m'aider encore fois je veux bien sinon Merci pour votre aide:).

I.B.
Posté le 16 novembre 2005 - 15:49
salut

une solution peut consister en créant un alias du fichier puis d'y ajouter les enregistrements un par un en testant le doublon dans l'alias puis supprimer le fichier initial et renommer l'alias
Posté le 16 novembre 2005 - 16:09
ca peut etre une idée mais je ne vois pas comment faire dans mon cas ?
et ca peut marcher avec 5 millions d'enregistrement?
merci d'avance
Posté le 16 novembre 2005 - 17:15
je jette ça comme ça (pas testé)

soit le fichier contenant les doublons : FIC_ORG
soit la clé unique de ce fichier : CLE_UNIK
soit le fichier épuré : FIC_DEST

i est un entier = 1

// Création de l'alias
hAlias("FIC_ORG","FIC_DEST")
hCreation("FIC_DEST")

// Lecture du fichier
hLit("FIC_ORG",i)
tantque pas hendehors()
// Recherche dans le fichier destination (simplifié)
hRecherche("FIC_DEST","CLE_UNIK",FIC_ORG.CLE_UNIK)
si pas hTrouve() alors
// Copie l'enregistrement
hCopieEnreg("FIC_DEST","FIC_ORG")
hAjoute("FIC_DEST")
fin
i++
hLit("FIC_ORG",i)
Fin

// Renomme le ficheir d'origine pour le sauvegarder
fRenomme(<chemin complet>+"\FIC_ORG.FIC",<chemin complet>+"\FIC_ORG_SAV.FIC")
// Faire de même pour le .NDX et éventuellement le .MMO

// Renomme le fichier épuré
fRenomme(<chemin complet>+"\FIC_DEST.FIC",<chemin complet>+"\FIC_ORG.FIC")
// Faire de même pour le .NDX et éventuellement le .MMO

Voilà ... il y a peut être des erreurs

A+
Posté le 16 novembre 2005 - 18:47
Regarde dans l'aide hErreurDoublon().

Bon dev.
Jean-Pierre
Posté le 16 novembre 2005 - 23:42
déactiver la fenetre auto de gestion des doublons avec HSurErreur ( "*" , hErrBlocage , "" ) ?
Posté le 17 novembre 2005 - 12:17
j'ai essayé de mettre cette fonction -> HSurErreur ( "*" , hErrBlocage , "" ) mais
ca donne toujours le meme message :

____le mécanisme de sécurité assisté de l'application WDTST été déclenché. Erreur de doublons sur a rubrique <typologie_constr.IDTypologie_constr>_____

voila mon code:

HLitPremier(typologie_constr,IDTypologie_constr)
TANTQUE PAS HEnDehors(typologie_constr)
HModifie(typologie_constr)
SI HErreurDoublon() ALORS
HSupprime(typologie_constr)
FIN
HLitSuivant(typologie_constr,IDTypologie_constr)
FIN
Posté le 17 novembre 2005 - 12:41
sinon pour régler de probleme de doublons j'ai une requete:

DELETE
FROM typologie_constr
WHERE IDTypologie_constr
IN
(select IDTypologie_constr
from IDTypologie_constr
group by IDTypologie_constr
having count(*)>1)

mais ca me supprime les enregistrements qui sont en doubles et les doublons aussi
je ne sais pas j'etais clair !
merci d avance
Posté le 17 novembre 2005 - 13:43
Bonjour,

Une idée :

Une requete SQL utilisant

DISTINCT
Utilisé avec l'instruction SELECT
Supprime les enregistrements dupliqués (doublons) du résultat de la requête

Reprendre ces enregistrements dans un fichier temporaire

Supprimer tous les enregistrements du fichier initial et recopier
ceux du fichier temporaire

Cordialement

Albert
Posté le 17 novembre 2005 - 13:44
HSurErreur ("*" , hErrBlocage ou hErrTout , "MaProcédure")


PROCEDURE MaProcédure()
RENVOYER opAnnuler


à tester cordialement JCP


"issam" <i.belkaid@laposte.net> a écrit dans le message de news:
437c6080$1@news.pcsoft.fr...

j'ai essayé de mettre cette fonction -> HSurErreur ( "*" , hErrBlocage , "" )
mais
ca donne toujours le meme message :

____le mécanisme de sécurité assisté de l'application WDTST été déclenché.
Erreur de doublons sur a rubrique <typologie_constr.IDTypologie_constr>_____

voila mon code:

HLitPremier(typologie_constr,IDTypologie_constr)
TANTQUE PAS HEnDehors(typologie_constr)
HModifie(typologie_constr)
SI HErreurDoublon() ALORS
HSupprime(typologie_constr)
FIN
HLitSuivant(typologie_constr,IDTypologie_constr)
FIN


Posté le 17 novembre 2005 - 14:36
HExécuteRequêteSQL ( REQ_SUPP , "SELECT DISTINCT * FROM typologie_constr")

donc je fais comment pour copier cette requete sur un fichier temporaire?
Posté le 17 novembre 2005 - 15:31
issam a écrit :
salut,
j'ai un fichier HF de 5 millions d'enregistrementset j'ai une clé (DCN) qui est en plusieurs doubles.
donc pour régler ce probleme j'ai essayé le code suivant:

HLitPremier(immeuble,DCN)
TANTQUE PAS HEnDehors(immeuble)
HModifie(immeuble)
SI HErreurDoublon() ALORS

HSupprime(immeuble)
FIN
HLitSuivant(immeuble,DCN)
FIN

donc en exécutant, à chaque suppression de doublons il ya un message d'erreur qui s'affiche et je dois valider NON pour que ca supprime le doublons.
le probleme c'est qu'il ya beaucoup d'enregistrement :).
est ce que quelqu'un peut m'aider SVP? MERCI d'avance

Bonjour

Il n'y a pas 36 solutions pour dédoublonner...

Un parcours selon la clé unique. Je préconise un parcours "à la
remontée" en partant du bas vers le haut du fichier si on ne veux
conserver que les 'dernières lignes' (qui deviennent les premières
lues). A chaque modification de la clé on la récupère. Sinon, on
supprime l'enregistrement et passe au suivant.

//////////////////////////////////////////////////
cCle est une chaine
hLitDernier(Immeuble,DCN)
si pas HEnDehors(Immeuble) alors cCle=immeuble.DCN
TANTQUE PAS HEnDehors(Immeuble)
Si cCLe<>immeuble.DCN ALORS
cCLe=immeuble.DCN
SINON
// C'est un doublon, on le supprime
HSupprime(Immeuble)
FIN
hLitPrécédent(Immeuble,DCN)
FIN
//////////////////////////////////////////////////

Evidement, le traitement est foncttion du nombre d'occurrences mais il a
l'avantage de ne faire qu'un unique parcours séquentiel qui, avec les
ordres hXXX, est trés rapide (plus en tout cas qu'en SQL).
Si on ajoute que cette solution ne comporte aucune recherche, on peut
dire être à l'optimum.

La gestion des doublons est une évidence pour la suite...

++ R&B
WDForge.org