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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
koa0
Niveau 3
Niveau 3
Messages : 34
Enregistré le : jeu. 23 déc. 2010 15:38
Status : Hors ligne

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

#1

Message 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
Modifié en dernier par koa0 le jeu. 14 avr. 2011 15:19, modifié 3 fois.
Avatar du membre
Jerome
Niveau 9
Niveau 9
Messages : 661
Enregistré le : mar. 07 avr. 2009 08:35
Localisation : Picardie
Status : Hors ligne

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

#2

Message par Jerome »

Coucou,


Je vous conseil de lire ceci.




Jérôme
koa0
Niveau 3
Niveau 3
Messages : 34
Enregistré le : jeu. 23 déc. 2010 15:38
Status : Hors ligne

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

#3

Message par koa0 »

en espérant que c'est mieux
Avatar du membre
zeshrek
Niveau 10
Niveau 10
Messages : 984
Enregistré le : mer. 17 nov. 2010 09:31
Localisation : Sur ma chaise
Status : Hors ligne

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

#4

Message 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
Si vis pacem para bellum
koa0
Niveau 3
Niveau 3
Messages : 34
Enregistré le : jeu. 23 déc. 2010 15:38
Status : Hors ligne

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

#5

Message 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
Modifié en dernier par koa0 le jeu. 23 déc. 2010 16:41, modifié 1 fois.
Avatar du membre
Jerome
Niveau 9
Niveau 9
Messages : 661
Enregistré le : mar. 07 avr. 2009 08:35
Localisation : Picardie
Status : Hors ligne

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

#6

Message par Jerome »

N'oubliez pas la balise [R] dans le titre de votre premier message si votre sujet est résolu.
Avatar du membre
bloodwolff
Membre émérite
Membre émérite
Messages : 655
Enregistré le : ven. 18 avr. 2008 22:36
Localisation : Québec
Status : Hors ligne

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

#7

Message 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 ;)
Compte skype : bloodwolfff
Avatar du membre
sylvanie
Niveau 11
Niveau 11
Messages : 1556
Enregistré le : jeu. 26 juil. 2007 21:31
Localisation : Paris
Status : Hors ligne

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

#8

Message 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 ...
Toi qui cherche à mettre le doigt sur la solution, appuie sur F1.
Avatar du membre
GELDROC
Niveau 6
Niveau 6
Messages : 295
Enregistré le : sam. 10 oct. 2009 10:15
Status : Hors ligne

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

#9

Message 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]
Répondre