Page 1 sur 1

[R] Pb lors de recup d'un num de ligne de fichier

Posté : jeu. 23 déc. 2010 15:53
par koa0
Bonjour à toute la communauté Autoit,
J'aimerais récupérer le numéro d'une ligne recherché dans un fichier. J'ai par conséquent fait cette petite fonction:

Code : Tout sélectionner

;recupere le numero d'une ligne choisit     
func RecupererLigne($monfichier,$textARechercher)
    local $lecture
    local $iligne =0
    while 1
        $lecture = FileReadline ($monfichier)
        $iligne += 1
        if $lecture == $textARechercher then
           $temp_ligne=$iligne
            ExitLoop
        EndIf
        If @error = -1 Then ExitLoop
    WEnd
    FileClose ($open)
    return $temp_ligne
EndFunc 
 
et pour la tester je l'appelle de cette façon:

Code : Tout sélectionner

$itest=RecupererLigne("C:\AUTOMATISATION\betsi\test.txt","Ligne 7")
msgbox(0,"test",$itest)
 
Le script se bloque dans la boucle while. Quelque chose m'échappe. Pourriez vous m'indiquer l'erreur que je fais.
Merci

Re: [b]Pb lors de recuperation d'un num de ligne[/b]

Posté : jeu. 23 déc. 2010 15:54
par Jerome
Coucou,


Je vous conseil de lire ceci.




Jérôme

Re: [...] Pb lors de recup d'un num de ligne de fichier

Posté : jeu. 23 déc. 2010 15:58
par koa0
en espérant que c'est mieux

Re: [...] Pb lors de recup d'un num de ligne de fichier

Posté : jeu. 23 déc. 2010 16:30
par zeshrek
Déjà, tu n'ouvrais pas ton fichier.
Ensuite, tu testais le contenu de la ligen avant meme de savoir si tu avais pas une erreur
Enfin, tu comparais la ligne entiere avec ce que tu cherchais, mais vu ton exemple ce que tu recherches n'est en fait qu'une partie de la ligne

Code : Tout sélectionner

;recupere le numero d'une ligne choisie
Func RecupererLigne($monfichier, $textARechercher)
    $open = FileOpen($monfichier) ; il faut penser a ouvrir le fichier d'abord non ?
    Local $lecture
    Local $iligne = 0
    Local $trouve = False
    While 1
        $lecture = FileReadLine($monfichier)
        $iligne += 1
        If @error = -1 Then ; on teste d'abord si on est a la fin du fichier
            ExitLoop
        EndIf
        If StringInStr($lecture, $textARechercher) <> 0 Then ; comme je sais pas si ce que tu recherche c'est la ligne entiere ou juste un bout, on va faire comme si c'était une partie
            $trouve = True
            ExitLoop
        EndIf
    WEnd
    FileClose($open)
    If $trouve = True Then
        Return $temp_ligne ; si la recherche aboutit, on renvoie le N° de ligne
    Else
        Return $trouve ; sinon, on renvoie False (-1)
    EndIf
EndFunc

Re: [R] Pb lors de recup d'un num de ligne de fichier

Posté : jeu. 23 déc. 2010 16:39
par koa0
Merci beaucoup pour cette aide,
Effectivement j'oubliais quelques fondamentaux. Novice sur autoit, je pensais que Filereadline(...) ouvrait le fichier.
Petite correction sur le script si on ouvre le fichier avec le pipe open on doit le réutiliser dans FileReadLine

Code : Tout sélectionner

;recupere le numero d'une ligne choisie
Func RecupererLigne($monfichier, $textARechercher)
    $open = FileOpen($monfichier) ; il faut penser a ouvrir le fichier d'abord non ?
    Local $lecture
    Local $iligne = 0
    Local $trouve = False
    While 1
        $lecture = FileReadLine($open)
        $iligne += 1
        If @error = -1 Then ; on teste d'abord si on est a la fin du fichier
            ExitLoop
        endif
            If StringInStr($lecture, $textARechercher) <> 0 Then ; comme je sais pas si ce que tu recherche c'est la ligne entiere ou juste un bout, on va faire comme si c'était jsute une partie
                $trouve = True
                $temp_ligne=$iligne
                ExitLoop
            EndIf
    WEnd
    FileClose($open)
    If $trouve = True Then
        Return $temp_ligne ; si la recherche est infructueuse, on renvoie le N° de ligne
    Else
        Return $trouve ; sinon, on renvoie False (-1)
    EndIf
EndFunc
 
Bonne fin de journée

Re: [...] Pb lors de recup d'un num de ligne de fichier

Posté : jeu. 23 déc. 2010 16:40
par Jerome
N'oubliez pas la balise [R] dans le titre de votre premier message si votre sujet est résolu.

Re: [...] Pb lors de recup d'un num de ligne de fichier

Posté : jeu. 23 déc. 2010 18:29
par bloodwolff
Filereadline() ouvre effectivement le fichier et ce n'était pas vraiment un erreur , mais il l'ouvre et le referme à chaque lecture de ligne ce qui fait perdre beaucoup de temps , c'est doc quand même mieux de l'ouvrir avant ;)

Re: [...] Pb lors de recup d'un num de ligne de fichier

Posté : jeu. 23 déc. 2010 20:31
par sylvanie
Voici un autre exemple en fonction récursive (pour lister tous les numéros de ligne si il y en a plusieures) exploitant les expressions régulières, où on délimite les blocs se finissant par l'expression cherhée et on compte le nombre de retours chariots :
► Afficher le texte
Limitation : si l'expression est présente n fois sur la même ligne alors on aura n fois le numéro de ligne
Bon, j'admet que là c'est un peut sortir la pelleteuse pour planter un piquet ...

Re: [...] Pb lors de recup d'un num de ligne de fichier

Posté : sam. 25 déc. 2010 21:27
par GELDROC
il existe aussi la fonction suivante :


Code : Tout sélectionner

$Ma_Rcherche = "Ces Ceci que je Cherche XD"
$Ma_Ligne_Rechercher_Sera = ""


dim $aRead
_FileReadToArray("Fichier.xxx", $aRead)
if @erreur then Exit
for $l = 1 to $aRead[0]
     if $aRead[$l] = $Ma_Rcherche then
          $Ma_Ligne_Rechercher_Sera = $l
          $l =  $aRead[0]
     endif
next

msgbox(0, "Resulta", '"' & $Ma_Rcherche & '" Ce trouve Ligne : ' & $Ma_Ligne_Rechercher_Sera)

 

avec tous çà je pense que ton problème doit être résolu ?
ci oui remplace [..] par [R]