OVH Cloud OVH Cloud

[WD8] Suppression d'enreg sur clé unique (?)

7 réponses
Avatar
freddie3
Bonjour,
J'ai un fichier de 100 000 enreg, qui stocke des appels téléphoniques reçus,
avec comme clé (multiple) un champ qui contient un numéro de téléphone.
Comment puis-je supprimer (assez rapidement) tous les enreg dont le numéro
de téléphone est unique, c'est à dire tous les Clients qui n'ont appelé
qu'une fois?
Merci de vos réponses pour ce Pb qui me semblait simple à l'analyse, mais me
bloque lors de la réalisation.
Tyves.

7 réponses

Avatar
jacques trepp
freddie3 wrote:
Bonjour,
J'ai un fichier de 100 000 enreg, qui stocke des appels téléphoniques
reçus, avec comme clé (multiple) un champ qui contient un numéro de
téléphone. Comment puis-je supprimer (assez rapidement) tous les
enreg dont le numéro de téléphone est unique, c'est à dire tous les
Clients qui n'ont appelé qu'une fois?
Merci de vos réponses pour ce Pb qui me semblait simple à l'analyse,
mais me bloque lors de la réalisation.
Tyves.



bonjour,
essayer une requete avec un COUNT, ou son équivalent
SELECT NUM_TEL, COUNT(NUM_TEL) FROM TONFICHIER
GROUP BY NUM_TEL HAVING COUNT(NUM_TEL) = 1

ça marche avec mysql. pourquoi pas avec hf

--
Jacques TREPP
AlbyGest

enlever _pasdespam pour me joindre
Avatar
Eric LAURENT
freddie3 a écrit:

Bonjour,
J'ai un fichier de 100 000 enreg, qui stocke des appels téléphoniques
reçus, avec comme clé (multiple) un champ qui contient un numéro de
téléphone. Comment puis-je supprimer (assez rapidement) tous les
enreg dont le numéro de téléphone est unique, c'est à dire tous les
Clients qui n'ont appelé qu'une fois?
Merci de vos réponses pour ce Pb qui me semblait simple à l'analyse,
mais me bloque lors de la réalisation.
Tyves.


Si tu travailles en HF, voici une méthode.
Tu lis les enregistrements en commençant par le premier.
Si la clé du hlitsuivant est différente, tu fais un hlitprécédent puis
hsupprime.

Cela doit donner quelque chose un peu comme cela:

hlitpremier(MonFichier,Numtel)
MemoVariable=Monfichier.Numtel
tantque pas hendehors(Monfichier)
hlitsuivant(MonFichier)
si Monfichier.Numtel<>MemoVariable alors
hlitprécédent(Monfichier)
hsupprime(Monfichier)
hlitsuivant(MonFichier)
MemoVariable=Monfichier.Numtel
fin
fin

Je n'ai pas testé le code mais s'il y a des erreurs, l'esprit est là.

---
Eric LAURENT

(enlever nospam.)
---
Avatar
freddie3
Merci Eric,

Si la clé du hlitsuivant est différente, tu fais un hlitprécédent puis
hsupprime.


J'avais aussi testé cet algorythme, mais: si enreg+1 est différent de enreg,
ce dernier est peut-être identique à enreg-1 ; Donc, il ne faut pas que je
le supprime...

Salut
Tyves

"Eric LAURENT" a écrit dans le message de
news:cengb5$i1l$
freddie3 a écrit:

> Bonjour,
> J'ai un fichier de 100 000 enreg, qui stocke des appels téléphoniques
> reçus, avec comme clé (multiple) un champ qui contient un numéro de
> téléphone. Comment puis-je supprimer (assez rapidement) tous les
> enreg dont le numéro de téléphone est unique, c'est à dire tous les
> Clients qui n'ont appelé qu'une fois?
> Merci de vos réponses pour ce Pb qui me semblait simple à l'analyse,
> mais me bloque lors de la réalisation.
> Tyves.
Si tu travailles en HF, voici une méthode.
Tu lis les enregistrements en commençant par le premier.
Si la clé du hlitsuivant est différente, tu fais un hlitprécédent puis
hsupprime.

Cela doit donner quelque chose un peu comme cela:

hlitpremier(MonFichier,Numtel)
MemoVariable=Monfichier.Numtel
tantque pas hendehors(Monfichier)
hlitsuivant(MonFichier)
si Monfichier.Numtel<>MemoVariable alors
hlitprécédent(Monfichier)
hsupprime(Monfichier)
hlitsuivant(MonFichier)
MemoVariable=Monfichier.Numtel
fin
fin

Je n'ai pas testé le code mais s'il y a des erreurs, l'esprit est là.

---
Eric LAURENT

(enlever nospam.)
---




Avatar
freddie3
Salut Jacques,
Je me penche sur ta solution qui me séduit énormément. C'est l'idée qui me
plait, car je m'étais jusqu'à maintenant perdu dans des boucles imbriquées,
des alias ou autre hsauveposition, qui n'aboutissaient à rien.
Merci
Tyves

"jacques trepp" a écrit dans le message de
news:410f4093$0$1897$
freddie3 wrote:
> Bonjour,
> J'ai un fichier de 100 000 enreg, qui stocke des appels téléphoniques
> reçus, avec comme clé (multiple) un champ qui contient un numéro de
> téléphone. Comment puis-je supprimer (assez rapidement) tous les
> enreg dont le numéro de téléphone est unique, c'est à dire tous les
> Clients qui n'ont appelé qu'une fois?
> Merci de vos réponses pour ce Pb qui me semblait simple à l'analyse,
> mais me bloque lors de la réalisation.
> Tyves.

bonjour,
essayer une requete avec un COUNT, ou son équivalent
SELECT NUM_TEL, COUNT(NUM_TEL) FROM TONFICHIER
GROUP BY NUM_TEL HAVING COUNT(NUM_TEL) = 1

ça marche avec mysql. pourquoi pas avec hf

--
Jacques TREPP
AlbyGest

enlever _pasdespam pour me joindre




Avatar
Eric LAURENT
freddie3 a écrit:

Merci Eric,

Si la clé du hlitsuivant est différente, tu fais un hlitprécédent
puis hsupprime.


J'avais aussi testé cet algorythme, mais: si enreg+1 est différent de
enreg, ce dernier est peut-être identique à enreg-1 ; Donc, il ne
faut pas que je le supprime...

Salut
Tyves



Impossible, puisque le fichier est classé sur la clé !
Essaie l'algo, ça doit marcher (ne pas oublier le hlitsuivant après la
suppression)
---
Eric LAURENT

(enlever nospam.)
---
Avatar
STASZEWSKI André
freddie3 wrote:
Bonjour,
J'ai un fichier de 100 000 enreg, qui stocke des appels téléphoniques
reçus, avec comme clé (multiple) un champ qui contient un numéro de
téléphone. Comment puis-je supprimer (assez rapidement) tous les
enreg dont le numéro de téléphone est unique, c'est à dire tous les
Clients qui n'ont appelé qu'une fois?
Merci de vos réponses pour ce Pb qui me semblait simple à l'analyse,
mais me bloque lors de la réalisation.
Tyves.



Bonjour

NumTel est une chaîne
POUR TOUT TonFichier SUR Rub_Tel
//on lit chaque n° de tél de la rubrique concernée
NumTel = Rub_Tel
//si le n° lu n'a pas été trouvé dans le fichier alors il c'est qu'il
est unique et peut être supprimé
SI PAS HRecherchePremier(TonFichier, Rub_Tel, NumTel)
HSupprime(TonFichier )
FIN
--
Cordialement,
André STASZEWSKI
Photo Visu version 3.0 dispo sur www.PlaneteDev.fr.st
Contact ; Cliquez sur ce lien : http://cerbermail.com/?OT0Wnwyzph
Avatar
freddie3
Salut André,
Le Pb, avec ton algorythme, c'est que le pointeur dans l'index Rub_Tel se
déplace avec le HRecherchePremier, et ne revient pas à sa position initiale
pour continuer le POUR TOUT, qui ne parcourt donc pas l'ensemble du fichier.
Il faut dans ce cas utiliser un HAlias pour faire la recherche, et le
fichier Natif pour faire le parcours séquentiel sur la Clé (et c'est là que
je bloquais un peu ...).

Mais grâce aux Post ci-dessus, j'ai pu résoudre mon Pb.

Merci de ta contribution.
Tyves

"STASZEWSKI André" a écrit dans le message de
news:cf356r$h25$
freddie3 wrote:
> Bonjour,
> J'ai un fichier de 100 000 enreg, qui stocke des appels téléphoniques
> reçus, avec comme clé (multiple) un champ qui contient un numéro de
> téléphone. Comment puis-je supprimer (assez rapidement) tous les
> enreg dont le numéro de téléphone est unique, c'est à dire tous les
> Clients qui n'ont appelé qu'une fois?
> Merci de vos réponses pour ce Pb qui me semblait simple à l'analyse,
> mais me bloque lors de la réalisation.
> Tyves.

Bonjour

NumTel est une chaîne
POUR TOUT TonFichier SUR Rub_Tel
//on lit chaque n° de tél de la rubrique concernée
NumTel = Rub_Tel
//si le n° lu n'a pas été trouvé dans le fichier alors il c'est qu'il
est unique et peut être supprimé
SI PAS HRecherchePremier(TonFichier, Rub_Tel, NumTel)
HSupprime(TonFichier )
FIN
--
Cordialement,
André STASZEWSKI
Photo Visu version 3.0 dispo sur www.PlaneteDev.fr.st
Contact ; Cliquez sur ce lien : http://cerbermail.com/?OT0Wnwyzph