Code : Tout sélectionner
#cs
_ArrayDeleteRows($aArray1) ou _ArrayDeleteRows($aArray1, "") supprime les lignes vierges
_ArrayDeleteRows($aArray1, "", 3) supprime les lignes dont la cellule colonne 3 est vide
_ArrayDeleteRows($aArray1, "2", 5) supprime les lignes dont la cellule colonne 5 contient le nombre 2
_ArrayDeleteRows($aArray1, "25") supprime les lignes dont au moins une des cellules contient le nombre 25
_ArrayDeleteRows($aArray1, "|25") supprime les lignes vierges ou dont une des cellules contient le nombre 25
_ArrayDeleteRows($aArray1, "25|17") supprime les lignes dont au moins une des cellules contient les nombres 25 ou 17
_ArrayDeleteRows($aArray1, "5") supprime les lignes dont au moins une des cellules contient le nombre 5
_ArrayDeleteRows($aArray1, "5", -1, 1) supprime les lignes dont au moins une des cellules contient exactement le nombre 5
_ArrayDeleteRows($aArray1, "|25", -1, 1) supprime les lignes dont au moins une des cellules contient le nombre 25 ou est vide
_ArrayDeleteRows($aArray1, "", -1, 1) supprime les lignes qui ont au moins une cellule vide
#ce
;=================================================
#include <Array.au3>
Dim $aArray1[31][11]
Dim $Resultat[13][3] = [["Sur total de 30 lignes : ", "virées :", "reste :"], _
["Sans ligne vide"], _
["Sans cellule vide Col 3"], _
["Sans 2 dans Col 5"], _
["sans ligne avec 25"], _
["sans ligne vide ou avec 25"], _
["Sans ligne avec 17"], _
["Sans ligne avec 25 ou 17"], _
["Sans ligne avec 5 (simple)"], _
["Sans ligne avec 5 (fullstring)"], _
["sans li. avec 25 ou case vide"], _
["sans ligne avec case vide"], _
[""]]
For $i = 0 To 30
Local $Rnd = Random(1, 10, 1)
For $j = 0 To 10
If $Rnd <> 5 Then
$aArray1[$i][$j] = Random(1, 100, 1)
Else
$aArray1[$i][$j] = ""
EndIf
Next
Next
;$aArray1[3][4] = "25" ; on fait une ligne avec 25 + une case vide
$aArray1[3][3] = "" ; on vide la case 3x3 pour le test
$aArray1[4][3] = "" ; on vide la case 4x3 pour le test ( 2 lignes avec 1 case vide )
$aArray1[5][4] = "" ; on vide la case 5x4 pour le test ( 3 lignes avec 1 case vide )
$aArray2 = $aArray1
_ArrayDisplay($aArray1, "Tableau à traiter :")
;==========================================
; Func _ArrayDeleteRows(ByRef $_array, $_string = "", $_str_col = -1, $_fullstring = 0, $_delim = "|")
$aArray1 = $aArray2
_ArrayDeleteRows($aArray1) ; sans ligne vide
$Resultat[1][2] = UBound($aArray1) - 1
$Resultat[1][1] = 30 - $Resultat[1][2]
$aArray1 = $aArray2
_ArrayDeleteRows($aArray1, "", 3) ; Sans cellule vide Col 3
$Resultat[2][2] = UBound($aArray1) - 1
$Resultat[2][1] = 30 - $Resultat[2][2]
$aArray1 = $aArray2
_ArrayDeleteRows($aArray1, "2", 5) ; Sans ligne avec 2 dans Col 5
$Resultat[3][2] = UBound($aArray1) - 1
$Resultat[3][1] = 30 - $Resultat[3][2]
$aArray1 = $aArray2
_ArrayDeleteRows($aArray1, "25") ; Sans ligne avec 25
$Resultat[4][2] = UBound($aArray1) - 1
$Resultat[4][1] = 30 - $Resultat[4][2]
$aArray1 = $aArray2
_ArrayDeleteRows($aArray1, "|25") ; sans ligne vide ou avec 25
$Resultat[5][2] = UBound($aArray1) - 1
$Resultat[5][1] = 30 - $Resultat[5][2]
$aArray1 = $aArray2
_ArrayDeleteRows($aArray1, "17") ; Sans ligne avec 17
$Resultat[6][2] = UBound($aArray1) - 1
$Resultat[6][1] = 30 - $Resultat[6][2]
$aArray1 = $aArray2
_ArrayDeleteRows($aArray1, "25|17") ; Sans ligne avec 25 ou 17
$Resultat[7][2] = UBound($aArray1) - 1
$Resultat[7][1] = 30 - $Resultat[7][2]
$aArray1 = $aArray2
_ArrayDeleteRows($aArray1, "5") ; Sans ligne avec 5
$Resultat[8][2] = UBound($aArray1) - 1
$Resultat[8][1] = 30 - $Resultat[8][2]
$aArray1 = $aArray2
_ArrayDeleteRows($aArray1, "5", -1, 1) ; Sans ligne avec 5 (fullstring)
$Resultat[9][2] = UBound($aArray1) - 1
$Resultat[9][1] = 30 - $Resultat[9][2]
$aArray1 = $aArray2
_ArrayDeleteRows($aArray1, "|25", -1, 1) ; sans case avec 25 ou vide
$Resultat[10][2] = UBound($aArray1) - 1
$Resultat[10][1] = 30 - $Resultat[10][2]
$aArray1 = $aArray2
_ArrayDeleteRows($aArray1, "", -1, 1) ; sans case vide
$Resultat[11][2] = UBound($aArray1) - 1
$Resultat[11][1] = 30 - $Resultat[11][2]
_ArrayDisplay($Resultat, "Elements retournés")
;===========================================================
Func _ArrayDeleteRows(ByRef $_array, $_string = "", $_str_col = -1, $_fullstring = 0, $_delim = "|")
Local $dims = UBound($_array, 0), $fired = 0
If Not IsArray($_array) Or $dims > 2 Then Return SetError(1, 0, 0)
If $_fullstring <> 0 and $_fullstring <> 1 Then Return SetError(2, 0, 0)
If StringRegExp($_delim, '\w+') Then Return SetError(3, 0, 0) ; interdit lettre, chiffre ou _ comme délimiteur
Switch $dims
Case 1 ; array 1D
$_str_col = -1
Local $temp[UBound($_array)]
For $i = 0 To UBound($_array) - 1
$row = $_array[$i]
If _TestRow($row, $_string, $_fullstring, $_delim) Then ; teste la ligne
$fired += 1
ContinueLoop ; passe à la ligne suivante
EndIf
$temp[$i - $fired] = $_array[$i]
Next
If UBound($_array) - $fired < 1 Then
Dim $temp[1]
Else
ReDim $temp[UBound($_array) - $fired]
EndIf
Case 2 ; array 2D
Local $cols = UBound($_array, 2), $row = ""
If $_str_col < -1 Or $_str_col > $cols - 1 Then Return SetError(4, 0, 0) ; $_str_col = -1
Local $temp[UBound($_array)][$cols]
For $i = 0 To UBound($_array) - 1 ; parcourt les lignes
$row = "|"
If $_str_col = -1 Then
For $j = 0 To $cols - 1
$row &= $_array[$i][$j] & "|" ; concatène la ligne avec des séparateurs
Next
Else
$row = $_array[$i][$_str_col] & "|" ; cellule de colonne
EndIf
If _TestRow($row, $_string, $_fullstring, $_delim) Then ; teste la ligne ou la cellule
$fired += 1
ContinueLoop ; passe à la ligne suivante
EndIf
For $j = 0 To $cols - 1
$temp[$i - $fired][$j] = $_array[$i][$j]
Next
Next
If UBound($_array) - $fired < 1 Then
Dim $temp[1][$cols]
Else
ReDim $temp[UBound($_array) - $fired][$cols]
EndIf
EndSwitch
$_array = $temp
$temp = ""
Return 1
EndFunc ;==>_ArrayDeleteRows
; INTERNAL USE ONLY ===============
Func _TestRow($_text, $s_string, $t_fullstring, $t_delim)
$ts_string = StringSplit($s_string, $t_delim)
For $i = 1 To $ts_string[0]
If $ts_string[$i] = "" Then
If $t_fullstring = 1 Then
If StringInStr($_text, "||") Then Return 1 ; teste si case vide
Else
If StringRegExpReplace($_text, '\||\s', "") = "" Then Return 1 ; teste si ligne vide
EndIf
Else
If $t_fullstring = 1 Then
If StringInStr($_text, "|" & $ts_string[$i] & "|") Then Return 1 ; teste si case avec la string fullstring
Else
If StringInStr($_text, $ts_string[$i]) Then Return 1 ; teste si ligne avec la string
EndIf
EndIf
Next
EndFunc ;==>_TestRow