[R] ReadLine qui tourne en boucle

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
lokidor
Niveau 3
Niveau 3
Messages : 36
Enregistré le : mar. 08 févr. 2011 10:57
Localisation : Sophia Antipolis
Status : Hors ligne

[R] ReadLine qui tourne en boucle

#1

Message par lokidor »

Re bonjour,

J'ai un petit soucis, j'ai un programme qui est sensé lire les lignes d'un fichier texte afin de leur faire subir un sort atroce.

Petit problème : il me lit la 1er ligne en boucle, et je ne vois vraiment pas ce qui ne l'empêche de tourner en rond... ou plutôt le contraire.... :roll:

Code : Tout sélectionner

$fic_PRU = "***\traitement_multiple_ajout_PRU.txt" ; on défini le chemin du fichier

        if FileOpen($fic_PRU,0) Then
        MsgBox(1,"1","fichier chargé") ; si le fichier n'est pas ouvert correctement, on arrête tout
            While 1
                $line_actu = FileReadLine($fic_PRU) ; on lit la ligne
                If @error = -1 Then ExitLoop ; si c'est la dernière on sort

                MsgBox(1,"2","premiere ligne : "&$line_actu)
                $Machine_PRU_left=StringLeft ($line_actu, 1 )
                $Machine_PRU_right=StringRight ($line_actu, 5 )
                $res_isdigit=StringIsDigit($Machine_PRU_right)

                if StringLen($line_actu)=6 And $Machine_PRU_left = "M" And $res_isdigit=1 Then ; petit test afin de savoir si les entrées sont au bon format
                    .
                    .
                    .
                    If _IsChecked($LOURME) then ; on traite le cas concerné

                        $Groupe   = "PARTNER"
                        $Serveur  = "***"
                        $description_PRU = "PARTNER"
                        MsgBox(1,"4","variables renseignées, prochaine étape création du compte"&@CRLF&"$line_actu : "&$line_actu&@CRLF&"$groupe : "&$Groupe&@CRLF&"$serveur : "&$serveur)

                        CreateAccount($line_actu,$line_actu,"***",$Groupe,$Serveur,$description_PRU); petite fonction récupérée sur ce site même et modifiée par mes soins

                ;~      MsgBox(1,"5","compte créé")
                        GUICtrlSetState($Pic1, $GUI_SHOW)
                ;~      MsgBox(1,"6","image affichée")
                    EndIf
                    .
                    .
                    .
                Else
                    MsgBox(64,"Erreur","La ligne n'est pas au bon format elle doit commencer par la lettre M et etre suivi de 5 chiffres décimaux."&@CRLF&"partie gauche : "&$Machine_PRU_left&@CRLF&"partie droite :"&$Machine_PRU_right&@CRLF&"resisdigit : "&$res_isdigit)
                EndIf
            WEnd
            FileClose($fic_PRU) ; on referme le fichier après avoir fini.
        Else
            MsgBox(64,"Erreur","Le fichier 'traitement_multiple_ajout_PRU.txt' n'est pas présent")
        EndIf
 
Je suis à votre disposition si vous avez besoin d'infos complémentaires.
Modifié en dernier par lokidor le mar. 15 févr. 2011 10:07, modifié 2 fois.
Loki,

Le monde avance grâce aux paresseux!
GaRydelaMer
Niveau 7
Niveau 7
Messages : 450
Enregistré le : mer. 18 mars 2009 22:12
Localisation : Montpellier
Status : Hors ligne

Re: [..] ReadLine qui tourne en boucle

#2

Message par GaRydelaMer »

Bonsoir

l'erreur est ici:
$line_actu = FileReadLine($fic_PRU,3) ; on lit la ligne

tu lis toujours la ligne 3 !!!
Remplace le par $line_actu = FileReadLine($fic_PRU) ; on lit la ligne en cours

Si tu veux commencer ou changer de ligne regarde du coté de FileSetPos, FileGetPos
lokidor
Niveau 3
Niveau 3
Messages : 36
Enregistré le : mar. 08 févr. 2011 10:57
Localisation : Sophia Antipolis
Status : Hors ligne

Re: [..] ReadLine qui tourne en boucle

#3

Message par lokidor »

En effet il y a une petite erreur qui m'a échappé quand j'ai copié collé le script, mais le ",3" est le simple résultat d'une manœuvre désespéré. J'ai essayé de lui faire faire autre chose que de lire la première ligne, mais en vain.

J'édite le post au dessus, mais ça ne fonctionne toujours pas, et j'ignore vraiment pourquoi.

help!!
Loki,

Le monde avance grâce aux paresseux!
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: [..] ReadLine qui tourne en boucle

#4

Message par zeshrek »

A mon avis il faudrait lire l'aide de FileReadLine !
If a filename is given rather than a file handle - the file will be opened and closed during the function call - for parsing large text files this will be much slower than using filehandles.
Vu que le fhichier n'est pas ouvert initialement par un fileopen dont tu récupererait le handle que tu passerais a FileReadLine, mais que tu passes a chaque fois son nom au FileReadLine, il est ouvert et refermé a chaque appel, et donc a chaque fois il lit la 1ere ligne !
essaye de remplacer le début de ton script par ceci :

Code : Tout sélectionner

$fic_PRU = "***\traitement_multiple_ajout_PRU.txt" ; on défini le chemin du fichier

       [color=#FF0000] $fichier = FileOpen($fic_PRU,0)[/color] 
        [color=#FF0000]if $fichier <> -1 then[/color]
        MsgBox(1,"1","fichier chargé") ; si le fichier n'est pas ouvert correctement, on arrête tout
            While 1
                [color=#FF0000]$line_actu = FileReadLine($fichier) ; on lit la ligne[/color]
Si vis pacem para bellum
lokidor
Niveau 3
Niveau 3
Messages : 36
Enregistré le : mar. 08 févr. 2011 10:57
Localisation : Sophia Antipolis
Status : Hors ligne

Re: [..] ReadLine qui tourne en boucle

#5

Message par lokidor »

Bien vu, ce passage m'a échappé.

Je teste tout de suite, je pense que ça devrait fonctionner (pourquoi les vieux reflexes du shell ne ressortent-ils pas au bon moment... ><)

Edit : ça fonctionne nickel. Merci encore
Loki,

Le monde avance grâce aux paresseux!
Répondre