[R] Filte sur 2 colonnes doublon dans un tableau
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
-
- Niveau 6
- Messages : 211
- Enregistré le : dim. 15 févr. 2009 01:08
- Status : Hors ligne
[R] Filte sur 2 colonnes doublon dans un tableau
Bonjour,
Je tourne en rond... voici ma problématique en espérant avoir de l'aide, merci.
J'ai des données dans un tableau qui comporte 10 colonnes.
Je cherche à obtenir des données dans un nouveau tableau sans les doublons présents sur 2 colonnes.
Le soucis c'est que je dois filtrer sur 2 colonnes différentes...
J'ai la commande _ArrayUnique($aResult,1,0,0, $ARRAYUNIQUE_AUTO )qui me filtre sur une colonne, mais j'obtiens le résultat filtré, c'est à dire tous les éléments sans doublon mais avec résultat sur 1 colonne et je n ai plus le tableau de mes 10 colonnes filtrées.... et du coup je ne peux pas refaire la même manipulation pour filtrer sur la 2e colonne...
Je dois mal m'y prendre,.... je n arrive pas à obtenir des données dans un nouveau tableau sans les doublons présents sur 2 colonnes.
merci de votre aide
Je tourne en rond... voici ma problématique en espérant avoir de l'aide, merci.
J'ai des données dans un tableau qui comporte 10 colonnes.
Je cherche à obtenir des données dans un nouveau tableau sans les doublons présents sur 2 colonnes.
Le soucis c'est que je dois filtrer sur 2 colonnes différentes...
J'ai la commande _ArrayUnique($aResult,1,0,0, $ARRAYUNIQUE_AUTO )qui me filtre sur une colonne, mais j'obtiens le résultat filtré, c'est à dire tous les éléments sans doublon mais avec résultat sur 1 colonne et je n ai plus le tableau de mes 10 colonnes filtrées.... et du coup je ne peux pas refaire la même manipulation pour filtrer sur la 2e colonne...
Je dois mal m'y prendre,.... je n arrive pas à obtenir des données dans un nouveau tableau sans les doublons présents sur 2 colonnes.
merci de votre aide
Modifié en dernier par touslesmatins le sam. 24 oct. 2020 14:18, modifié 3 fois.
- jchd
- AutoIt MVPs (MVP)
- Messages : 2282
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [..] Filte sur 2 colonnes doublon dans un tableau
Si les colonnes en question sont convertibles en type chaîne, je créerai une Map destinée à stocker la concaténation de ces deux colonnes, disons K. On part de la fin du tableau et si K est présente dans la Map, on efface l'élément du tableau, sinon on ajoute K à la Map.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
- walkson
- Modérateur
- Messages : 1036
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: [..] Filte sur 2 colonnes doublon dans un tableau
Bonjour,
Peut être ce code va vous convenir ?
On repère les doublons dans les colonnes et la ligne est supprimée
Peut être ce code va vous convenir ?
On repère les doublons dans les colonnes et la ligne est supprimée
Code : Tout sélectionner
#include <Array.au3>
;===================== Array avec doublons ==================================
Local $array[15][10]
For $i = 0 To 9
For $y = 0 To 14
$array[$y][$i] = $i + $y
Next
Next
$array[0][2] = $array[1][2]
$array[8][1] = $array[4][1]
$array[3][1] = $array[4][1]
$array[6][1] = $array[4][1]
$array[7][1] = "AA 128"
$array[14][1] = "AA 128"
$array[13][1] = "BB"
$array[12][1] = "CC"
$array[13][4] = $array[14][4]
_ArrayDisplay($array,"origine")
;============================================================================
Local $colonne[3] = [1,2,4];colonne à controler
For $i = 0 To UBound($colonne) - 1
$del = ""
$col = $colonne[$i]
_ArraySort($array,0,0,0,$col);trie sur colonne sélectionnée
_ArrayDisplay($array,"trié sur col " & $col)
For $y = 1 To UBound($array,1) - 1 ;on compare la ligne N à la ligne N-1
If $array[$y][$col] = $array[$y - 1][$col] Then $del &= $y - 1 & ";";on stocke les lignes en doublon
Next
$del = StringTrimRight($del,1);on supprime le ; à la fin
_ArrayDelete($array,$del)
Next
_ArrayDisplay($array,"résultat")
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
- jchd
- AutoIt MVPs (MVP)
- Messages : 2282
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [..] Filte sur 2 colonnes doublon dans un tableau
Je réalise que la question est ambigüe, ou du moins je crains d'avoir mal interprété la demande.
Soit les doublons sont déterminés colonne par colonne, soit on ne considère que les doublons dont les 2 (ou N) colonnes surveillées sont identiques.
J'envisageais la seconde option, mais Walkson penche pour la première.
Soit les doublons sont déterminés colonne par colonne, soit on ne considère que les doublons dont les 2 (ou N) colonnes surveillées sont identiques.
J'envisageais la seconde option, mais Walkson penche pour la première.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
- mikell
- Spammer !
- Messages : 6292
- Enregistré le : dim. 29 mai 2011 17:32
- Localisation : Deep Cévennes
- Status : Hors ligne
Re: [..] Filte sur 2 colonnes doublon dans un tableau
Comme toujours, fournir un exemple concret des données de départ et du résultat attendu permettrait de résoudre le problème, et d'éviter l'habituelle collection de posts et de scripts pifométrisés qui n'auront pour commentaire qu'un "oui mais non, c'est pas ça que j'voulais dire..." 

" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
- jchd
- AutoIt MVPs (MVP)
- Messages : 2282
- Enregistré le : lun. 30 mars 2009 22:57
- Localisation : Sud-Ouest de la France (43.622788,-1.260864)
- Status : Hors ligne
Re: [..] Filte sur 2 colonnes doublon dans un tableau
Mmmpffff !
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
-
- Niveau 6
- Messages : 211
- Enregistré le : dim. 15 févr. 2009 01:08
- Status : Hors ligne
Re: [..] Filte sur 2 colonnes doublon dans un tableau
Bonjour et merci effectivement les doublons sont déterminés colonne par colonne...
je regarde .....
je regarde .....
-
- Niveau 6
- Messages : 211
- Enregistré le : dim. 15 févr. 2009 01:08
- Status : Hors ligne
Re: [..] Filte sur 2 colonnes doublon dans un tableau
Merci Mikell, c'était des doublons propre à chaque colonne...
Bravo walkson, votre réponse me convient parfaitement, je vais pouvoir continuer.... un grand merci
Bravo walkson, votre réponse me convient parfaitement, je vais pouvoir continuer.... un grand merci
-
- Niveau 6
- Messages : 211
- Enregistré le : dim. 15 févr. 2009 01:08
- Status : Hors ligne
Re: [...] Filte sur 2 colonnes doublon dans un tableau
Bonjour, tout en gardant la solution de @Walkson, peut on connaitre le nbre de doublons pour chaque doublon.
J'explique :
La solution de @Walkson filtre sur 2 colonnes et affiche un tableau final et c'est correct, maintenant je souhaiterais recuperer les doublons supprimés et connaitre le nombre de fois qu ils ont ete trouvé dans les 2 colonnes .
Exemple type de resultat recherché :
ligne 12 philippe trouvé 14 fois
ligne 49 foot trouvé 3 fois
c'est possible ça ?
merci
J'explique :
La solution de @Walkson filtre sur 2 colonnes et affiche un tableau final et c'est correct, maintenant je souhaiterais recuperer les doublons supprimés et connaitre le nombre de fois qu ils ont ete trouvé dans les 2 colonnes .
Exemple type de resultat recherché :
ligne 12 philippe trouvé 14 fois
ligne 49 foot trouvé 3 fois
c'est possible ça ?
merci
- walkson
- Modérateur
- Messages : 1036
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: [...] Filte sur 2 colonnes doublon dans un tableau
Bonjour,
Dans le code suivant, je ne supprime pas la ligne mais la valeur en doublon avec le choix du doublon (problème que vous n'avez pas soulevé) remplacé par 2 tirets. Les lignes où se trouvent les doublons sont enregistrées dans un array (et dans la console) sous forme
Dans le code suivant, je ne supprime pas la ligne mais la valeur en doublon avec le choix du doublon (problème que vous n'avez pas soulevé) remplacé par 2 tirets. Les lignes où se trouvent les doublons sont enregistrées dans un array (et dans la console) sous forme
6 | 5 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | col 1> Li 4> 5
valeur 5 ligne 4 colonne 1 (à partir de 0)
Code : Tout sélectionner
#include <Array.au3>
;===================== Array avec doublons ==================================
Local $array[15][10]
For $i = 0 To 9
For $y = 0 To 14
$array[$y][$i] = $i + $y
Next
Next
$array[0][2] = $array[1][2]
$array[8][1] = $array[4][1]
$array[3][1] = $array[4][1]
$array[6][1] = $array[4][1]
$array[7][1] = "AA 128"
$array[14][1] = "AA 128"
$array[13][1] = "BB"
$array[12][1] = "CC"
$array[13][4] = $array[14][4]
_ArrayDisplay($array,"origine")
;============================================================================
Local $Sup, $array1[0][11]
Local $colonne[3] = [1,2,4];colonne à controler
For $i = 0 To UBound($colonne) - 1
Local $ligne1 = "", $ligne2 = ""
$col = $colonne[$i]
_ArraySort($array,0,0,0,$col);trie sur colonne sélectionnée
;_ArrayDisplay($array,"trié sur col " & $col)
For $y = 1 To UBound($array,1) - 1 ;on compare la ligne N à la ligne N-1
If $array[$y][$col] = $array[$y - 1][$col] Then
For $x = 0 To UBound($array,2) - 1
$ligne1 &= $array[$y - 1][$x] & " | "
$ligne2 &= $array[$y][$x] & " | "
Next
$rep = MsgBox($MB_YESNO,"Doublon sur col" & $col,$ligne1 & @CRLF & $ligne2& @CRLF & @CRLF & "Voulez vous supprimer la première ligne ?" & @CRLF & "NON supprime la deuxième ligne")
If $rep = 6 Then ;$IDYES (6)
$ligne1 = $ligne1 & "col " & $col &"> "& "Li " & $y - 1 &"> "& $array[$y - 1][$col]
$array[$y - 1][$col] = "--"
$Sup &= $ligne1 & @CRLF
Else
$ligne2 = $ligne2 & "col " & $col &"> "& "Li " & $y &"> "& $array[$y][$col]
$array[$y][$col] = "--"
$Sup &= $ligne2 & @CRLF
EndIf
EndIf
$ligne1 = ""
$ligne2 = ""
Next
Next
_ArrayDisplay($array,"résultat")
_ArrayAdd($array1,$Sup)
_ArrayDisplay($array1,"suprimé")
ConsoleWrite($Sup & @CRLF)
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
-
- Niveau 6
- Messages : 211
- Enregistré le : dim. 15 févr. 2009 01:08
- Status : Hors ligne
Re: [...] Filte sur 2 colonnes doublon dans un tableau
Merci effectivement ce n etait pas mentionné sur ma demande, désolé j ai complété et merci pour votre réponse plus que complete 
Encore une question si possible...
Est il possible de copier le résultat d'un _ArrayDisplay($array) vers une feuille excell ?
Merci pour votre aide précieuse

Encore une question si possible...
Est il possible de copier le résultat d'un _ArrayDisplay($array) vers une feuille excell ?
Merci pour votre aide précieuse
- walkson
- Modérateur
- Messages : 1036
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: [...] Filte sur 2 colonnes doublon dans un tableau
Oui, c'est possible. Regardez l'aide pour _Excel_RangeWrite() exemple 3Est il possible de copier le résultat d'un _ArrayDisplay($array) vers une feuille excell ?
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
-
- Niveau 6
- Messages : 211
- Enregistré le : dim. 15 févr. 2009 01:08
- Status : Hors ligne
Re: [...] Filte sur 2 colonnes doublon dans un tableau
Walkson c'est Parfait merci



- walkson
- Modérateur
- Messages : 1036
- Enregistré le : ven. 12 août 2011 19:49
- Localisation : Hurepoix
- Status : Hors ligne
Re: [R] Filte sur 2 colonnes doublon dans un tableau
Si le format CSV ne vous dérange pas
avec #include <File.au3>
Les résultats se superposent (et c'est plus simple
)
[edit] en fonction du choix du doublon sur la colonne 1 de l'exemple, il se produit des erreurs sur la valeur 5.
La logique (après coup) serait de choisir le doublon à conserver dans l'ensemble des multiples doublons (dans une listview par exemple)
$open = FileOpen(@ScriptDir & "\array.csv",1)
_FileWriteFromArray($open,$array1,Default,Default,";")
FileClose($open)
_FileWriteFromArray($open,$array1,Default,Default,";")
FileClose($open)
Les résultats se superposent (et c'est plus simple

[edit] en fonction du choix du doublon sur la colonne 1 de l'exemple, il se produit des erreurs sur la valeur 5.
La logique (après coup) serait de choisir le doublon à conserver dans l'ensemble des multiples doublons (dans une listview par exemple)
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)