Bonjour
Je cherche à fusionner 2 tableaux en 1 seul avec en point de comparaison la même valeur
Local $nombre[5][2] = [["Valeur 1", "11"], ["Valeur 2", "22"], ["Valeur 3", "33"], ["Valeur 4", "44"], ["Valeur 5", "55"]]
Local $lettre[5][2] = [["Valeur 1", "aa"], ["Valeur 2", "bb"], ["Valeur 3", "cc"], ["Valeur 4", "dd"], ["Valeur 5", "ee"]]
j'aimerai avoir ce résultat
valeur 1 11 aa
valeur 2 22 bb
valeur 3 33 cc
valeur 4 44 dd
valeur 5 55 ee
je vous remercie
Fusionner 2 tableaux
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.
- TommyDDR
- Modérateur
- Messages : 2102
- Enregistré le : mar. 22 juil. 2008 21:55
- Localisation : Nantes
- Status : Hors ligne
Re: Fusionner 2 tableaux
Voilà une fonction qui fusionnera 2 tableaux en gérant à peu près tous les cas
Voici un exemple où l'on passe par tous ces cas :
- "Valeur X" présent dans $nombre mais pas dans $lettre
- "Valeur X" présent dans $lettre mais pas dans $nombre
- Plusieurs "Valeur X" identiques présents dans $lettre
- Plusieurs "Valeur X" identiques présents dans $nombre
- Nombre de valeurs par tableau pouvant être ajouté : infini
Voici un exemple où l'on passe par tous ces cas :
#include <Array.au3>
Local $nombre = [["Valeur 1", "11"], ["Valeur 2", "22"], ["Valeur 2", "yy"], ["Valeur 3", "33"], ["Valeur 4", "44"], ["Valeur 5", "55"]]
Local $lettre = [["Valeur 1", "aa", "zzz"], ["Valeur 2", "bb"], ["Valeur 3", "cc"], ["Valeur 4", "dd"], ["Valeur 4", "dddd"], ["Valeur 6", "ee"]]
Local $special = [["Valeur 1", "$$"], ["Valeur 2", "%%"], ["Valeur 3", ".."], ["Valeur 4", "**"], ["Valeur 5", ";;;"], ["Valeur 7", "//"]]
Local $fusion = fusion($nombre, $lettre)
$fusion = fusion($fusion, $special)
_ArrayDisplay($fusion)
Func fusion($tab1, $tab2)
If(UBound($tab1, 0) <> 2 Or UBound($tab2, 0) <> 2) Then Return SetError(1)
Local $fusion[0][1]
Local $keys[0]
Local $tabs = [$tab1, $tab2]
For $tabId = 0 To UBound($tabs, 1) - 1
Local $tab = $tabs[$tabId]
For $i = 0 To UBound($tab, 1) - 1
_ArrayAdd($keys, $tab[$i][0])
Next
Next
$keys = _ArrayUnique($keys, 0, 0, 0, 0)
ReDim $fusion[UBound($keys, 1)][UBound($fusion, 2)]
For $i = 0 To UBound($keys, 1) - 1
Local $count = 0
$fusion[$i][$count] = $keys[$i]
$count += 1
For $tabId = 0 To UBound($tabs, 1) - 1
Local $tab = $tabs[$tabId]
Local $idxTab = _ArrayFindAll($tab, $keys[$i])
For $j = 0 To UBound($idxTab, 1) - 1
For $k = 1 To UBound($tab, 2) - 1
Local $val = $tab[$idxTab[$j]][$k]
If($val <> "") Then
If($count >= UBound($fusion, 2)) Then
ReDim $fusion[UBound($fusion, 1)][$count+1]
EndIf
$fusion[$i][$count] = $val
$count += 1
EndIf
Next
Next
Next
Next
Return $fusion
EndFunc
Local $nombre = [["Valeur 1", "11"], ["Valeur 2", "22"], ["Valeur 2", "yy"], ["Valeur 3", "33"], ["Valeur 4", "44"], ["Valeur 5", "55"]]
Local $lettre = [["Valeur 1", "aa", "zzz"], ["Valeur 2", "bb"], ["Valeur 3", "cc"], ["Valeur 4", "dd"], ["Valeur 4", "dddd"], ["Valeur 6", "ee"]]
Local $special = [["Valeur 1", "$$"], ["Valeur 2", "%%"], ["Valeur 3", ".."], ["Valeur 4", "**"], ["Valeur 5", ";;;"], ["Valeur 7", "//"]]
Local $fusion = fusion($nombre, $lettre)
$fusion = fusion($fusion, $special)
_ArrayDisplay($fusion)
Func fusion($tab1, $tab2)
If(UBound($tab1, 0) <> 2 Or UBound($tab2, 0) <> 2) Then Return SetError(1)
Local $fusion[0][1]
Local $keys[0]
Local $tabs = [$tab1, $tab2]
For $tabId = 0 To UBound($tabs, 1) - 1
Local $tab = $tabs[$tabId]
For $i = 0 To UBound($tab, 1) - 1
_ArrayAdd($keys, $tab[$i][0])
Next
Next
$keys = _ArrayUnique($keys, 0, 0, 0, 0)
ReDim $fusion[UBound($keys, 1)][UBound($fusion, 2)]
For $i = 0 To UBound($keys, 1) - 1
Local $count = 0
$fusion[$i][$count] = $keys[$i]
$count += 1
For $tabId = 0 To UBound($tabs, 1) - 1
Local $tab = $tabs[$tabId]
Local $idxTab = _ArrayFindAll($tab, $keys[$i])
For $j = 0 To UBound($idxTab, 1) - 1
For $k = 1 To UBound($tab, 2) - 1
Local $val = $tab[$idxTab[$j]][$k]
If($val <> "") Then
If($count >= UBound($fusion, 2)) Then
ReDim $fusion[UBound($fusion, 1)][$count+1]
EndIf
$fusion[$i][$count] = $val
$count += 1
EndIf
Next
Next
Next
Next
Return $fusion
EndFunc
3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679