[R] Filtrer les lignes d'un tableau

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

[R] Filtrer les lignes d'un tableau

#1

Message par pierrotm777 »

Bonjour à tous,

Pour ceux qui seraient intéréssés, ce porgramme permet de convertir des fichier .csv format GARMIN en un format compatible
avec un programme , "speedlimite.exe" ,http://www.mp3car.com/vbulletin/rr-plug ... igger.html , utilisé en parallèle avec RideRunner, frontend pour CarPc .

Je voudrais filtrer certaines lignes d'un fichier passant par un tableau qui le reformate (Merci Tlem) en fonction d'un combo .

Voici donc mon Gui fonctionnel :
► Afficher le texte
Mon filtre se fait donc sur 4 possibiltés:

ALL SETPOINTS , Je traite toutes les lignes de mon fichier d'entrée .
HIGH CONFIDENCE , Je ne traite ET NE GARDE que les lignes contenant high.
MEDIUM CONFIDENCE , Je ne traite ET NE GARDE que les lignes contenant medium.
LOW CONFIDENCE , Je ne traite ET NE GARDE que les lignes contenant low.

Mon filtre semble fonctionner , le traitement est bien fait selon mon critère .
MAIS, les lignes à ne pas traiter restent tel quel dans mon fichier final au lieu d'être effacées .

Je pense que mon erreur est dans ma fonction de traitement (_DoIt3) _ArrayDelete pourrait
convenir mais je n'arrive pas à l'utiliser



Je joint mon fichier source pour une meilleur compréhension , ainsi qu'un exemple de fichier d'entré.

Qui peut me dire où est mon erreur ?

Merci pour votre aide par avance !
Fichiers joints

[L’extension csv a été désactivée et ne peut plus être affichée.]

csv2speedzonelimit_v1.4.zip
(12.1 Kio) Téléchargé 84 fois
Modifié en dernier par pierrotm777 le ven. 15 mai 2009 11:17, modifié 8 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Filtrer les lignes d'un tableau

#2

Message par Tlem »

Rajoutez les balise de code dans votre message.
Je sait, ça fait bizarre de mettre les balises de code dans les balise spoiler, mais c'est bien plus lisible.

Et puis, comme d'habitude, si il était possible d'avoir quelque chose de fonctionnel pour tester, ce serait plus facile.
Là, il faut s'imaginer plein de chose, reconstruire un script fonctionnel, etc ...
Autant dire que personne ne regardera. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: [..] Filtrer les lignes d'un tableau

#3

Message par orax »

Bonjour,
j'ai quelques difficultés pour comprendre comment tester le script. :cry:
J'ai téléchargé les fichiers joints trapster_radars.csv et csv2speedzonelimit_v1.4.zip ; je lance le script ; et ensuite...?
J'ai essayé d'aller dans l'onglet Trapster pour y mettre le fichier trapster_radars mais visiblement ça ne semble pas marcher, le script plante : Array variable has incorrect number...
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Filtrer les lignes d'un tableau

#4

Message par Tlem »

Je viens de jeter un oeil sur le code (presque 1500 lignes :shock: ) et d'après ce que j'ai vu, dans vos fonctions tel que la fonction _DoIt3 par exemple, vous envoyez un tableau qui contient des lignes vides !!! :shock:
Il est clair dans ce cas, que si vous ne faite pas d'exception pour ne par traiter la ligne vide, vous allez droit au mur. :o

Vous avez donc deux possibilités :

1 - dans vos fonctions, vous rajoutez un contrôle du contenu de la ligne et si cette ligne est vide on ne la traite pas. Par contre le tableau contiendra toujours ces lignes vides qui ne vous sont pas forcément utiles. :wink:

2 - Rajouter une fonction qui élimine les lignes vides du tableau afin de faire vos traitement _DoItx.
Rajoutez après avoir chargé vos fichiers dans le tableau (après la ligne 591) ces lignes :

Code : Tout sélectionner

$aRF3 = _CleanBlankLine($aRF3)
$aRFR3 = _CleanBlankLine($aRFR3)
$aZlistRF3 = _CleanBlankLine($aZlistRF3)
$aZlistRFR3 = _CleanBlankLine($aZlistRFR3)
Puis à la fin du code, rajoutez la fonction _CleanBlankLine :

Code : Tout sélectionner

Func _CleanBlankLine($aArrayToClean)
    Local $i
    If IsArray($aArrayToClean) Then
        For $i = Ubound($aArrayToClean)-1 to 1 Step -1
            If $aArrayToClean[$i] = "" Then _ArrayDelete($aArrayToClean, $i)
        Next
    EndIf
    Return $aArrayToClean
EndFunc
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Filtrer les lignes d'un tableau

#5

Message par pierrotm777 »

Bonjour,

Je vous joints l'ensembles des fichiers , pensez juste à modifier les lignes 41 à 48
en fonction du directory où se trouvent vos fichiers .

http://www.mediafire.com/?sharekey=3420 ... b9a8902bda
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Filtrer les lignes d'un tableau

#6

Message par Tlem »

Oui, mais pourquoi faire ?
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Filtrer les lignes d'un tableau

#7

Message par pierrotm777 »

Bonjour Tlem,

Merci pour votre aide .

J'ai réalisé les ajouts recommandés , mais j'ai toujours dans mon fichier de sortie les lignes qui
ne sont pas traités :

Exemple de fichier résultant:
► Afficher le texte
J'ai fait ici le choix de medium :
Toutes les lignes comportant le terme "medium" sont bien traitées ,
mais les autres , bien que non traitées , ne sont pas effacées .

Dans votre fonction , la ligne " If $aArrayToClean[$i] = "" Then _ArrayDelete($aArrayToClean, $i) " , si je comprends bien,
efface toute ligne vide . Si c'est bien le cas , je voudrais en fait que la fonction efface toute ligne qui ne comporte pas ce que je choisi dans mon filtre . all , high , medium ou low .

??
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Filtrer les lignes d'un tableau

#8

Message par GaRydelaMer »

Bonjour

si je peux me permettre de te bouleverser, mais j'ai une bonne solution a te proposer. Vous savez que j'aime les base de données et en particulier l'utilisation de ADO.

Avec ADO, il est possible d'ouvrir un fichier csv, de plus les Recorset sont pratique pour filtrer et parcourir les données.

Je te propose d'ouvrir le Fichier cvs avec ADO, d'obtenir un un objet recordset qui te permettra d'écrire ton fichier résultant facilement. Moyennant 1 petit truc a faire avant juste de créer un Fichier Schema.ini dans le même dossier que le fichier csv, et de faire un tour pour plus d'info sur le schema:
http://www.connectionstrings.com/textfile
http://msdn.microsoft.com/en-us/library/ms709353.aspx
► Afficher le texteSchema.ini
Et le code j'utilise ConsoleWrite pour écrire les résultat mais tu peux trés bien écrire dans un fichier ou alimenter un tableau enfin ce que tu veux quoi ;)

Code : Tout sélectionner

Global Const $adoProvider = "Microsoft.Jet.OLEDB.4.0"
Global Const $adOpenStatic = 3
Global Const $adLockUnspecified = -1

Local $basedir = @ScriptDir
Local $oConn = ObjCreate("ADODB.Connection")
$oConn.ConnectionString = "Provider=" & $adoProvider & ";Extended Properties='text';Data Source=" & $basedir
$oConn.Open

Local $oRs = ObjCreate("ADODB.Recordset")
$oRs.Open("SELECT * FROM trapster_radars.csv", $oConn, $adOpenStatic, $adLockUnspecified)
$oRs.Filter = "Latitude <> '' AND Champ2 Like '%high%'"

While Not $oRs.EOF
    For $i = 0 To $oRs.Fields.Count - 1
        ConsoleWrite($oRs.Fields($i).Name & "=" & $oRs.Fields($i).Value & @LF)
    Next
    ConsoleWrite(@LF)
    $oRs.MoveNext
WEnd
$oRs.Close
$oConn.Close
 
et le résultat dans la console en filtrant les ligne vide et le choix high.
Cela se fait a la ligne $oRs.Filter = "Latitude <> '' AND Champ2 Like '%high%'"
remplace high, par low ou medium ou alors pour tous enlève la partie AND Champ2 Like '%high%'

Code : Tout sélectionner

Latitude=-71.169800
Longitude=41.656800
Champ1=Police Often Hide Here
Champ2=Confidence high
Champ3=Last vote time 2008-09-25 144944
Champ4=First voter offthegrid
Champ5=Last voter boxster
Champ6=Address Cannot find matching intersection
Champ7=

Latitude=-71.151900
Longitude=41.671900
Champ1=Police Often Hide Here
Champ2=Confidence high
Champ3=Last vote time 2009-01-23 215244
Champ4=First voter offthegrid
Champ5=Last voter Sgttuba69
Champ6=Address 0.09 mi from intersection Stafford Rd and Progress St
Champ7=Fall River
 
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Filtrer les lignes d'un tableau

#9

Message par GaRydelaMer »

Pour obtenir ton fichier résultat

Code : Tout sélectionner

Global Const $adoProvider = 'Microsoft.Jet.OLEDB.4.0'
Global Const $adOpenStatic = 3
Global Const $adLockUnspecified = -1

Local $basedir = @ScriptDir
Local $Filter[2]
$Filter[1] = "medium"
Local $Site = "TRAPSTER"

Local $oConn = ObjCreate("ADODB.Connection")
$oConn.ConnectionString = "Provider=" & $adoProvider & ";Extended Properties='text';Data Source=" & $basedir
$oConn.Open
Local $oRs = ObjCreate("ADODB.Recordset")
$oRs.Open("SELECT * FROM trapster_radars.csv WHERE Latitude <> '' ORDER BY Latitude", $oConn, $adOpenStatic, $adLockUnspecified)
Switch $Filter[1]
    Case "HIGH"
        $oRs.Filter = "Champ2 Like '%high%'"
    Case "MEDIUM"
        $oRs.Filter = "Champ2 Like '%medium%'"
    Case "LOW"
        $oRs.Filter = "Champ2 Like '%low%'"
    Case Else
        $oRs.Filter = ""
EndSwitch

Local $out = ""
While Not $oRs.EOF
    $out &= $oRs.Fields(1).Value & "," & $oRs.Fields(0).Value & _
            "," & $Site & "," & $oRs.Fields(2).Value & "," & $Filter[1] & @LF
    $oRs.MoveNext
WEnd
ConsoleWrite($out)

$oRs.Close
$oConn.Close 
Résultat

Code : Tout sélectionner

35.141600,-80.904700,TRAPSTER,Bonne Mère,Medium
33.098700,-117.200000,TRAPSTER,Police Often Hide Here,Medium
33.052100,-117.233000,TRAPSTER,Police Often Hide Here,Medium
34.744500,-83.401200,TRAPSTER,Police Often Hide Here,Medium
34.111100,-118.265000,TRAPSTER,Police Often Hide Here,Medium
41.747600,-73.183600,TRAPSTER,Police Often Hide Here,Medium
26.146600,-80.286900,TRAPSTER,Police Often Hide Here,Medium
41.769903,-71.323650,TRAPSTER,Police Often Hide Here,Medium
40.837200,-96.708600,TRAPSTER,Police Often Hide Here,Medium
33.062800,-117.238000,TRAPSTER,Police Often Hide Here,Medium
 
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Filtrer les lignes d'un tableau

#10

Message par pierrotm777 »

Bonjour GaRydelaMer,

Merci de t'intéresser à mon problème , mais ta solution m'obligerait à repenser tout mon script .

Je ferais un test de ta solution pour une autre appli , mais pour l'instant , j'essai d'assimiler le peu que je connais d'autoit .

Merci encore .
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Filtrer les lignes d'un tableau

#11

Message par GaRydelaMer »

Re,

pas tant que ca regarde ce code, j'ai repris ta logique.
le seul truc c'est de créer le fichier Schema.ini, FileWrite fera l'affaire. Aprés c'est vrai que tu pourrais faire ca pour les autres fichiers.

En fait au lieu de lire le fichier et le stocker dans un tableau
► Afficher le texte
Pour le fichier Schema.ini tu le créer une fois, les sections c'est le nom du fichier.
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Filtrer les lignes d'un tableau

#12

Message par pierrotm777 »

Merci encore GaRydelaMer pour votre aide,

J'ai testé et jobtiens cela:

Code : Tout sélectionner

C:\tmp\AutoIt\Ride Runner Scripts\Csv2SpeedZoneLimit\essai_bd.au3 (42) : ==> The requested action with this object has failed.:
$oRs.Filter = "Latitude <> '' AND Champ2 Like '%low%'"
$oRs.Filter = "Latitude <> '' AND Champ2 Like '%low%'"^ ERROR
Vraiment , je préfèrerais une solution de type Tlem, sans vouloir vous vexer !
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] Filtrer les lignes d'un tableau

#13

Message par GaRydelaMer »

Bonjour

Pour l'erreur je pense que ca vient du fichier Schema.ini.

Le filtre utilise les noms des champs défini dans ce fichier.

Je vais te donner une autre fonction qui créer le Schema de façon automatique, les champs sont nommé Colx, avec x = 1 pour le 1er champ puis incrémenter de 1.
Et tu remplace le Filtre par:

Code : Tout sélectionner

    ;$Filter = StringSplit($setuptrapsterFilter, ' ')
    Switch StringLower($Filter[1])
        Case "HIGH"
            $oRs.Filter = "Col1 <> '' AND Col4 Like '%high%'"
        Case "MEDIUM"
            $oRs.Filter = "Col1 <> '' AND Col4  Like '%medium%'"
        Case "LOW"
            $oRs.Filter = "Col1 <> '' AND Col4 Like '%low%'"
        Case Else
            $oRs.Filter = "Col1 <> ''"
    EndSwitch
 
Tu utilise la fonction comme ca dans le while:
_ADO_CreateSchema($vFic_RF3)
$aRF3 = _DoIt3($vFic_RF3, "level3")

$File le fichier avec ou sans le chemin voir même un chemin relatif
$HDR, [Oui/Non] Oui peut être "Yes", "True", 1 Définie si le fichier cvs à les nom des champs sur la 1ere Ligne
$FMT, [CVSdelimited/TABdelimited/un caractère ex "|"] Le format du fichier, le séparateur de Champ
CVSdelimited= Séparateur (,)
TabDelimited= Séparateur (@TAB)

Code : Tout sélectionner

Func _ADO_CreateSchema($File, $HDR = "no", $FMT = "CSVDelimited")
    ; Définie le Dossier et le nom du fichier, pour le parametre BaseDir et le Nom de la Table
    $File = _PathFull($File)
    Local $Drive, $BaseDir, $Table, $ext
    _PathSplit($File, $Drive, $BaseDir, $Table, $ext)
    $BaseDir = $Drive & $BaseDir
    $Table = $Table & $ext
    ; Données à écrire dans le Schema
    Local $datas
    ; Nom des Colonnes sur la 1ere Ligne
    Switch $HDR
        Case "Oui", "Yes", "True", 1
            $HDR = "Yes"
            $datas &= "ColNameHeader=True" & @LF
        Case Else
            $HDR = "No"
            $datas &= "ColNameHeader=False" & @LF
    EndSwitch
    ; Format de séparation des colonnes
    Switch $FMT
        Case "CSVDelimited", "TabDelimited", "FixedLength"
        Case Else
            $FMT = "Delimited(" & $FMT & ")"
    EndSwitch
    $datas &= "Format=" & $FMT & @LF
    IniWriteSection($BaseDir & "Schema.ini", $Table, $datas)
    ; Ouverture du Fichier et lectures des Champs
    Local $oRs = ObjCreate("ADODB.Recordset")
    With $oRs
        .ActiveConnection = "Provider=" & $adoProvider & _
                ";Extended Properties='text;HDR=" & $HDR & ";FMT=" & $FMT & "'" & _
                ";Data Source=" & $BaseDir
        .Source = "SELECT * FROM " & $Table
        .Open
        ; Ajoute les champs à $Datas
        Local $Name
        For $i = 0 To .Fields.Count - 1
            $Name = .Fields($i).Name
            If $Name = "F" & $i + 1 Then $Name = "Col" & $i + 1
            $datas &= "Col" & $i + 1 & "=" & $Name & " Char" & @LF
        Next
        .Close
    EndWith
    ; Ecriture complète du Schema de la Table
    IniWriteSection($BaseDir & "Schema.ini", $Table, $datas)
EndFunc   ;==>_ADO_CreateSchema
 
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Filtrer les lignes d'un tableau

#14

Message par pierrotm777 »

Bonjour,

Bon , jai testé et voilà ce que jobtiens .

Code : Tout sélectionner

C:\tmp\AutoIt\Ride Runner Scripts\Csv2SpeedZoneLimit\csv2speedzonelimit_v1.4old.au3(984,62) : WARNING: $oRs possibly not declared/created yet
            $oRs.Filter = "Col1 <> '' AND Col4 Like '%high%'"
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\tmp\AutoIt\Ride Runner Scripts\Csv2SpeedZoneLimit\csv2speedzonelimit_v1.4old.au3(1529,56) : WARNING: $adoProvider: possibly used before declaration.
        .ActiveConnection = "Provider=" & $adoProvider &
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\tmp\AutoIt\Ride Runner Scripts\Csv2SpeedZoneLimit\csv2speedzonelimit_v1.4old.au3(1529,56) : ERROR: $adoProvider: undeclared global variable.
        .ActiveConnection = "Provider=" & $adoProvider &
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
C:\tmp\AutoIt\Ride Runner Scripts\Csv2SpeedZoneLimit\csv2speedzonelimit_v1.4old.au3 - 1 error(s), 2 warning(s)
 
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Filtrer les lignes d'un tableau

#15

Message par pierrotm777 »

Tlem a écrit :Oui, mais pourquoi faire ?
Pour pouvoir compiler s'il le souhaite .
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Filtrer les lignes d'un tableau

#16

Message par pierrotm777 »

Tlem a écrit :Je viens de jeter un oeil sur le code (presque 1500 lignes :shock: ) et d'après ce que j'ai vu, dans vos fonctions tel que la fonction _DoIt3 par exemple, vous envoyez un tableau qui contient des lignes vides !!! :shock:
Il est clair dans ce cas, que si vous ne faite pas d'exception pour ne par traiter la ligne vide, vous allez droit au mur. :o

Vous avez donc deux possibilités :

1 - dans vos fonctions, vous rajoutez un contrôle du contenu de la ligne et si cette ligne est vide on ne la traite pas. Par contre le tableau contiendra toujours ces lignes vides qui ne vous sont pas forcément utiles. :wink:

2 - Rajouter une fonction qui élimine les lignes vides du tableau afin de faire vos traitement _DoItx.
Rajoutez après avoir chargé vos fichiers dans le tableau (après la ligne 591) ces lignes :

Code : Tout sélectionner

$aRF3 = _CleanBlankLine($aRF3)
$aRFR3 = _CleanBlankLine($aRFR3)
$aZlistRF3 = _CleanBlankLine($aZlistRF3)
$aZlistRFR3 = _CleanBlankLine($aZlistRFR3)
Puis à la fin du code, rajoutez la fonction _CleanBlankLine :

Code : Tout sélectionner

Func _CleanBlankLine($aArrayToClean)
    Local $i
    If IsArray($aArrayToClean) Then
        For $i = Ubound($aArrayToClean)-1 to 1 Step -1
            If $aArrayToClean[$i] = "" Then _ArrayDelete($aArrayToClean, $i)
        Next
    EndIf
    Return $aArrayToClean
EndFunc

J'ai remplacé le fichier trapster_radars.csv qui était mauvais .

Je ne vois pas où il y a besoin de traiter des lignes vides Tlem, (avec tout mon respect) .
Je souhaite faire un trie en fonction de mon combo .
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Filtrer les lignes d'un tableau

#17

Message par Tlem »

D'après les tests que j'avais effectué, tout comme orax, je m'étais retrouvé avec une erreur : Array variable has incorrect number...

Donc après analyse, il se trouvait que le tableau résultant de la lecture du fichier (ligne 588 à 591) avait une ligne sur deux qui était une ligne vide.
Donc lors du lancement de la fonction _DoIt3, le traitement effectué par cette dernière impliquait inévitablement une erreur car le traitement de la fonction ne pouvait aboutir sur une ligne vide.
D'où la solution que je vous ait proposé, pour éliminer ces lignes vides.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Filtrer les lignes d'un tableau

#18

Message par Tlem »

J'ai modifié votre fonction _DoIt3 pour la simplifiée, et pour ajouter le test de ligne vide.
Voici ce que cela donne :

Code : Tout sélectionner

Func _DoIt3($aRadars3, $Level3 )
    Local $k, $Var, $Var2, $Longitude3, $Latitude3, $Vitesse3
    
    For $k = 1 To $aRadars3[0]
        If $aRadars3[$k] <> "" And Not StringIsSpace($aRadars3[$k]) Then 
            $Var = StringSplit($aRadars3[$k], ',')

            $Longitude3 = $Var[2]
            $Latitude3 = $Var[1]
            $TypeRadar3 = $Var[3]
        
            $Var2 = StringSplit($Var[4],' ')
            $Level3 = $Var2[2]
        
            If StringInStr ($setuptrapsterFilter, "all") Then
                $aRadars3[$k] = $Longitude3 & ',' & $Latitude3 & ',TRAPSTER,' & $TypeRadar3 & ',' & $Level3 & ','   
            EndIf       
        EndIf   
    Next

    _ArrayDelete($aRadars3, 0) ; On supprime le nombre d'élément du tableau
    Return $aRadars3
EndFunc   ;==>_DoIt3
A vous de me dire si ça fonctionne.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
pierrotm777
Membre émérite
Membre émérite
Messages : 770
Enregistré le : sam. 11 oct. 2008 14:44
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Filtrer les lignes d'un tableau

#19

Message par pierrotm777 »

Bonjour Tlem,

Merci de votre aide.

La fonction ainsi modifiée marche bien si je choisi "all" .S
si je choisi "high" , "medium" ou "low" , aucun trie n'est fait (toutes les lignes existent non traitées), aucun traitement non plus .
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Filtrer les lignes d'un tableau

#20

Message par Tlem »

Oui, c'est normal, car dans votre fonction (et donc dans la mienne) aucun traitement n'est effectué dans les autres cas.

Pourriez-vous définir exactement le(s) traitement(s) dont vous auriez besoin ?
Devez-vous ne garder que les lignes du choix du combo et renvoyer le tableau ainsi filtré ?
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre