Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 1 sur 1
[?] Recherche d'une chaîne de caractères dans une liste
Auteur Message
Répondre en citant
Message [?] Recherche d'une chaîne de caractères dans une liste 
Hello !
J'ai une petite question ^^
J'aimerais faire une recherche de chaîne de caractère dans une liste de fichier.
Bout de code:
Code:
#include<Array.au3>
#include<FileListToArrayEx.au3>
#Include<File.au3>
$ar_Array = _FileListToArrayEx ("c:\", "*.txt", 0, "Temp", True) ;on récupère la liste de fichiers
$log = FileRead($ar_Array) ;ici ça se plante et en beauté et je ne vois pas quelle fonction mettre...
    If StringRegExp($log, 'test', 0) Then ;si chaîne test trouvée alors...
        MsgBox(0, "", "Chaîne trouvée !") ;on affiche un MsgBox
    EndIf

UDF FileListToArrayEx.au3 : http://autoitscript.fr/forum/viewtopic.php?p=20480&sid=5a7f7165a29a52e5…
Mais le problème est que ça ne fonctionne pas et je ne sais plus quoi faire.
Et j'aimerais que la MsgBox ne s'affiche qu'une seule fois si elle trouve plusieurs "test" dans un fichier et donc 0 fois quand il n'y a rien Mr. Green

Merci d'avance
Cordialement Entrivax




______________________________________________________

Skype
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [?] Recherche d'une chaîne de caractères dans une liste 
Salut,

FileListToArrayEx renvoie un tableau non ?

Si c'est le cas, il faut utiliser une valeur de ton tableau et non le tableau en entier avec ta fonction FileRead.

Ça donnerait :

Code:

log  = FileRead($ar_Array[i])


Que tu mettras dans une boucle for qui incrémentera i pour tester chaque valeur du tableau avec If StringRegExp($log, 'test', 0)

A la fin, tu testes si les toutes les conditions sont ok et ça devrait être bon.

A+




______________________________________________________
Répondre en citant
Message [?] Recherche d'une chaîne de caractères dans une liste 
Bonjour,

voici ce qui est retourné par l'udf.
Si tu ne sais pas ce que c'est, c'est un tableau en une dimension.

Code:
Remarks

The array returned is one-dimensional and is made up as follows:
$array[0] = Number of Files\Folders returned
$array[1] = 1st File\Folder
$array[2] = 2nd File\Folder
$array[3] = 3rd File\Folder
$array[n] = nth File\Folder



Je te conseille ce code :

Code:

#include<Array.au3>
#include<FileListToArrayEx.au3>
#Include<File.au3>
$ar_Array = _FileListToArray("c:\", "*.txt", 0, "Temp", True) ;on récupère la liste de fichiers
For $s=1 To $ar_Array[0] Step 1 $on détermine chaque fichier
   $log = FileRead($ar_Array[$s]) ;on lit le fichier numéro $s
    If StringRegExp($log, 'test', 0) Then ;si chaîne test trouvée alors...
        MsgBox(0, "", "Chaîne trouvée !") ;on affiche un MsgBox
    EndIf
Next




Répondre en citant
Message [?] Recherche d'une chaîne de caractères dans une liste 
Oui c'est ça, mais tu as mis un dollar au lieu d'un point virgule pour :
Citation:
$on détermine chaque fichier
et il fera plusieurs msgbox si il trouve plusieurs fichiers Mr. Green




______________________________________________________
Répondre en citant
Message [?] Recherche d'une chaîne de caractères dans une liste 
Hello !
Merci ça fonctionne maintenant mais aussi...
(Je sais je suis chiant Mr. Green )
Comment récupérer le répertoire du fichier dans lequel il y la chaîne test ?
Et pour récupérer le nombre de fichiers au total je devrais faire un truc du genre
Code:
$ar_Array = _FileListToArrayEx("c:\", "*.txt", 0, "Temp", True) ;on récupère la liste de fichiers
For $s=1 To $ar_Array[0] Step 1 $on détermine chaque fichier
   $log = FileRead($ar_Array[$s]) ;on lit le fichier numéro $s
    $nbfichiers += 1
?

Merci d'avance
Cordialement goku1524

P.S.:Guerrion24 la fonction c'est _FileListToArrayEx et non pas _FileListToArray Laughing




______________________________________________________

Skype
Répondre en citant
Message [?] Recherche d'une chaîne de caractères dans une liste 
Oui, tu fais un compteur que tu incrémentes à chaque fois que tu trouves la chaîne dans un fichier.

Pour savoir dans quels fichiers il y a la chaîne, il faut créér un tableau à une dimension de $ar_Array[0] cases (le nombre de fichiers qu'il y a, donc le maximum) et tu mettras dans chaque chemin qui a la chaîne dans une case.

A+




______________________________________________________
Répondre en citant
Message [?] Recherche d'une chaîne de caractères dans une liste 
Bonjour,

Tu utilises _FileListToArrayEx mais chez moi ça n'existe pas ou alors ce n'est pas intégré.
Par contre j'ai _FileListToArray qui a l'air de faire la même chose.
Moi j'aurais tendance à bidouiller un peu plus.

Je verrais plus un truc du genre, une fois que la chaîne est trouvée, on fait un $path=StringSplit dans $log
en cherchant les "\", on définie le nom du chemin à la première case du tableau
puis on fait une For en partant de $i=2 jusqu'à la dernière case du tableau -1
Et on définie $chemin=$chemin & "\" & $path[$i]

Puis quand c'est terminé le MsgBox et on incrémente le compteur.

Voici ce que j'aurais fait :

Code:
#include<Array.au3>
#Include<File.au3>
Local $count=0
Local $path=""
$ar_Array = _FileListToArray("c:\", "*.txt", 0) ;on récupère la liste de fichiers
For $s=1 To $ar_Array[0] Step 1 ;on détermine chaque fichier
   $log = FileRead($ar_Array[$s]) ;on lit le fichier numéro $s
    If StringRegExp($log, 'test', 0) Then ;si chaîne test trouvée alors...
      $path=StringSplit($ar_Array[$s],"\")
      $folder=$path[1]
      For $i=2 To $path[0]-1 Step 1
         $folder=$folder & "\" & $path[$i]
      Next
      MsgBox(0, "", "Chaîne trouvée dans " & $folder) ;on affiche un MsgBox
      $count+=1
    EndIf
Next


Ps: Grace à _FileListToArray je n'utilise que deux UDF : Array.au3 et File.au3
or avec ton _FileListToArrayEx (que je n'ai pas chez moi) tu utilise un UDF en plus donc tu alourdi ton code Okay



Répondre en citant
Message [?] Recherche d'une chaîne de caractères dans une liste 
Merci à vous deux Very Happy Cela fonctionne !

P.S. :@Guerrion24 : Moi c'est pas grave si cela m'alourdi le code tant que cela fonctionne... Et de plus j'ai dû modifier la ligne $ar_Array = _FileListToArray("c:\", "*.txt", 0) car cela me faisait une erreur donc je l'ai remplacée par la mienne et ça fonctionne ^^

A++




______________________________________________________

Skype
Répondre en citant
Message [?] Recherche d'une chaîne de caractères dans une liste 
OK pas de problème c'ets toi le chef.



Répondre en citant
Message [?] Recherche d'une chaîne de caractères dans une liste 
Re !
Euh... j'ai une autre question ^^'
Comment créer un tableau 1D dans lequel il y aura tout les répertoires des fichiers qui ont la chaîne ?
Merci d'avance !
Cordialement Goku1524




______________________________________________________

Skype
Répondre en citant
Message [?] Recherche d'une chaîne de caractères dans une liste 
Bonjour,

alors moi ce que j'ai fais c'est qu'après que l'on lise le nombre de fichier présent j'ai créé un tableau
d'une dimension à $ar_Array[0] lignes.
Puis avant le MsgBox j'ai mis à jour le tableau à la ligne où l'on se trouve notée dans la variable $s en ajoutant le chemin récupéré avant.

Voici le code :

Code:
#include<Array.au3>
#Include<File.au3>
Local $count=0
Local $path=""
$ar_Array = _FileListToArray("c:\", "*.txt", 0) ;on récupère la liste de fichiers
Local $tab[$ar_Array[0]]=[1,$ar_Array[0]]
For $s=1 To $ar_Array[0] Step 1 ;on détermine chaque fichier
   $log = FileRead($ar_Array[$s]) ;on lit le fichier numéro $s
    If StringRegExp($log, 'test', 0) Then ;si chaîne test trouvée alors...
      $path=StringSplit($ar_Array[$s],"\")
      $folder=$path[1]
   For $i=2 To $path[0]-1 Step 1
         $folder=$folder & "\" & $path[$i]
   Next
   $tab[$s]=$folder
   MsgBox(0, "", "Chaîne trouvée dans " & $folder) ;on affiche un MsgBox
   $count+=1
    EndIf
Next


Après je te le dis tout de suite, je pense qu'il y a deux fois plus rapide en récupérant que le chemin directement. Donc c'est un peu du bidouillage.



Répondre en citant
Message [?] Recherche d'une chaîne de caractères dans une liste 
Cool ! Mais ça serais super d'avoir aussi le code pour avoir le nom du fichier qui suit le répertoire Very Happy

Cordialement Entrivax.

EDIT : Trouvé :
Code:
$Dir = @ScriptDir & "\Dossier"
Global $ListFichier = GUICtrlCreateListView("Fichier(s)", 8, 8, 409, 321)
GUISetState(@SW_SHOW)
$ar_Array = _FileListToArrayEx("c:\Documents and Settings\goku1524", "*.txt", 0, "Temp", True) ;on récupère la liste de fichiers
For $s=1 To $ar_Array[0] Step 1 ;on détermine chaque fichier
Dim $chemin[$ar_Array[0]] = [$ar_Array[0]]
$log = FileRead($ar_Array[$s]) ;on lit le fichier numéro $s
    If StringRegExp($log, 'test', 0) Then ;si chaîne test trouvée alors ...
   $compteur += 1
   $chemin[$s] = $ar_Array[$s]
   GUICtrlCreateListViewItem($chemin[$s], $ListFichier)
   EndIf
Next




Dernière édition par goku1524 le Sam 16 Avr 2011 - 09:28; édité 2 fois

______________________________________________________

Skype
Répondre en citant
Message [?] Recherche d'une chaîne de caractères dans une liste 
Hello !
Désolé du double post mais j'ai une (je crois Laughing ) dernière question :
Comment après déplacer les fichiers trouvés, dans un autre dossier car j'ai essayé :
ça :
Code:
For $s=1 To $chemin[0] Step 1
FileMove($chemin[$s],$Dir)
Next

et ça :
Code:
For $s=1 To $chemin[0] Step 1
Run(@COMSPEC & "/c" & "Dir c:\ & Move /Y " & '"' & $chemin[$s] & '"' & " " & '"' & $Dir & '"')
Next

Mais rien n'y fait cela ne fonctionne pas sniff.
(Ce code se met à la suite du code du post précédant.)
Help me please !
Merci d'avance !
Cordialement Entrivax




______________________________________________________

Skype
Message [?] Recherche d'une chaîne de caractères dans une liste 


Montrer les messages depuis:
Répondre au sujet Page 1 sur 1
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch