[R] Filte sur 2 colonnes doublon dans un tableau

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
touslesmatins
Niveau 6
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

#1

Message par touslesmatins »

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
Modifié en dernier par touslesmatins le sam. 24 oct. 2020 14:18, modifié 3 fois.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
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

#2

Message par jchd »

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é.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Filte sur 2 colonnes doublon dans un tableau  

#3

Message par walkson »

Bonjour,
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)
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
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

#4

Message par jchd »

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.
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
mikell
Spammer !
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

#5

Message par mikell »

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..." Image
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2272
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

#6

Message par jchd »

Mmmpffff !
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
touslesmatins
Niveau 6
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

#7

Message par touslesmatins »

Bonjour et merci effectivement les doublons sont déterminés colonne par colonne...
je regarde .....
touslesmatins
Niveau 6
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

#8

Message par touslesmatins »

Merci Mikell, c'était des doublons propre à chaque colonne...
Bravo walkson, votre réponse me convient parfaitement, je vais pouvoir continuer.... un grand merci
touslesmatins
Niveau 6
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

#9

Message par touslesmatins »

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
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [...] Filte sur 2 colonnes doublon dans un tableau

#10

Message par walkson »

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
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)
touslesmatins
Niveau 6
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

#11

Message par touslesmatins »

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
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [...] Filte sur 2 colonnes doublon dans un tableau

#12

Message par walkson »

Est il possible de copier le résultat d'un _ArrayDisplay($array) vers une feuille excell ?
Oui, c'est possible. Regardez l'aide pour _Excel_RangeWrite() exemple 3
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
touslesmatins
Niveau 6
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

#13

Message par touslesmatins »

Walkson c'est Parfait merci ;) ;)
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [R] Filte sur 2 colonnes doublon dans un tableau

#14

Message par walkson »

Si le format CSV ne vous dérange pas
$open = FileOpen(@ScriptDir & "\array.csv",1)
_FileWriteFromArray($open,$array1,Default,Default,";")
FileClose($open)
avec #include <File.au3>
Les résultats se superposent (et c'est plus simple :P )
[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)
Répondre