J'ai une Array qui contient ceci ( les différent partie de l'array sont délimitées par un "/":
12/55/44/55/45/12/45/55
et j'aimerais que après le passage dans fonction, que l'array soit comme ceci :
12/55/44/45
Merco d'avance

Code : Tout sélectionner
#include <array.au3>
$a = StringRegExp("12/55/44/55/45/12/45/55/12/55/44/55/45/12/45/55/12/55/44/55/45/12/45/55", "(?>(\d+)/?)(?!.*?\1)", 3)
MsgBox(0,"",_ArrayToString($a,"/"))Code : Tout sélectionner
StringRegExpReplace("12/55/44/55/45/12/55/44/55/45","(\d\d)/?(?=.*?\1)","")
Code : Tout sélectionner
#include<array.au3>
$arr = StringSplit("12/55/44/55/45/12/45/55", "/", 1) ; utilisé ici seulement pour reconstituer le tableau fourni dans le sujet
_ArrayDisplay($arr,"Tableau avant")
supprdoublons($arr,1)
_ArrayDisplay($arr,"Tableau après")
; Infos
;Supprimes tous les doublons d'un tableau
;
; $arr = Tableau qui doit être examiné
; $min = (0,1) ... $arr[0] est-il l'index du tableau ou un élément à être traité ?
; $token = N'importe quoi qui ne sera pas dans le tableau (par défaut : /-_-\ ) * Dans 99.999999% des cas, ceci n'a pas à être changé
Func supprdoublons(ByRef $arr,$min = 1,$token = "/-_-\")
Switch $min
Case 0
$arr = StringSplit(_ArrayToString($arr, $token), $token,1)
Case 1
Case Else
MsgBox(0,"Erreur","Cette valeur est Booléenne (0,1)")
EndSwitch
$max = $arr[0]
For $i = $min To $arr[0]
If $arr[$i] = $token Then
ExitLoop
EndIf
$search = _ArrayFindAll($arr, $arr[$i])
$search = StringSplit(_ArrayToString($search, $token), $token,1)
If $search[0] > 1 Then
For $j = 2 To $search[0]
_ArrayDelete($arr, $search[$j])
_ArrayAdd($arr, $token)
Next
EndIf
Next
$search = _ArrayFindAll($arr,$token)
ReDim $arr[$search[0]]
Switch $min
Case 0
_ArrayPush($arr,$token)
ReDim $arr[$search[0]-1]
Case 1
$arr[0] = $search[0] -1
EndSwitch
Return $arr
EndFunc
Code : Tout sélectionner
;===========================================================================================
; Description : Enleve les doublons présent dans un array
; Function Name : _ArrayRemoveDuplicates()
; Parameter(s) : $avArray
; $iBase
; $iCaseSense
; $sDelimter
; Return Value(s): On Success - Returns 1 and the cleaned up Array is set
; On Failure - Returns an -1 and sets @Error
; @Error=1 $avArray is not an array
; @Error=2 $iBase is different from 1 or 2
; @Error=3 $iCaseSense is different from 0 or 1
; Author : uteotw, but ALL the credits go to nitro322 and SmOke_N, see link below
; Note(s) : None
; Link ; http://www.autoitscript.com/forum/index.php?showtopic=7821
; Example ; Yes
;===========================================================================================
Func _ArrayRemoveDuplicates(ByRef $avArray, $iBase = 0, $iCaseSense = 0, $sDelimter = "")
Local $sHold
If Not IsArray($avArray) Then
SetError(1)
Return -1
EndIf
If Not ($iBase = 0 Or $iBase = 1) Then
SetError(2)
Return -1
EndIf
If $iBase = 1 AND $avArray[0] = 0 Then
SetError(0)
Return 0
EndIf
If Not ($iCaseSense = 0 Or $iCaseSense = 1) Then
SetError(3)
Return -1
EndIf
If $sDelimter = "" Then
$sDelimter = Chr(01) & Chr(01)
EndIf
If $iBase = 0 Then
For $i = $iBase To UBound($avArray) - 1
If Not StringInStr($sDelimter & $sHold, $sDelimter & $avArray[$i] & $sDelimter, $iCaseSense) Then
$sHold &= $avArray[$i] & $sDelimter
EndIf
Next
Local $avNewArray = StringSplit(StringTrimRight($sHold, StringLen($sDelimter)), $sDelimter, 1)
ReDim $avArray[$avNewArray[0]]
For $i = 1 to $avNewArray[0]
$avArray[$i-1] = $avNewArray[$i]
Next
ElseIf $iBase = 1 Then
For $i= $iBase To UBound($avArray) - 1
If Not StringInStr($sDelimter & $sHold, $sDelimter & $avArray[$i] & $sDelimter, $iCaseSense) Then
$sHold &= $avArray[$i] & $sDelimter
EndIf
Next
$avArray = StringSplit(StringTrimRight($sHold, StringLen($sDelimter)), $sDelimter, 1)
EndIf
Return 1
EndFunc