Page 1 sur 1

[R] Récupération variable dans un fichier texte

Posté : mar. 26 janv. 2010 09:43
par Alexpgm
Bonjour,

Voila mon problème :
J'ai besoin de récupérer une variable dans une phrase. type : Blablabla..... Blabla (00).
Actuellement, mon fichier de log me donne une phrase, avec en bout un nombre.
Ce nombre varie bien évidemment...

Ou j'en suis :

J'arrive a ouvrir mon fichier avec ShellExecute avec @SW_Hide
Mais je ne sais pas comment lire la dernière ligne de mon log, et récupérer le nombre pour ensuite l'envoyer dans une variable...


Merci de votre aide.

Re: [..] Récupération variable dans un fichier texte

Posté : mar. 26 janv. 2010 14:45
par FuriousFred
Bonjour.

Je pense pouvoir t'aider mais il faut que tu sois plus clair. Essaie de joindre ton bout de code et un exemple de fichier de log si tu le peut.
Ensuite je suppose que le fichier d'aide d'autoit ou un des tutoriels du site pourrais répondre à ton problème...

Avec le peu d'infos que tu donnes, je ne peux que te renvoyer à l'aide des fonctions suivantes:

FileReadLine
StringLen
StringMid
MsgBox

Il y a normalement tout ce qu'il faut pour toi trouver. Si tu n'es pas anglophone, l'aide traduite en français est dispo sur le forum.

FuriousFred

Re: [..] Récupération variable dans un fichier texte

Posté : mar. 26 janv. 2010 19:03
par matwachich

Code : Tout sélectionner

#cs
Si par exemple ton fichier log s'appel log.txt et que la derniere ligne est de type: abcdefg (00),
c'est à dire: 8caractère-parenthese-variable-parenthese
#ce

$file = FileOpen("log.txt", 0)

$read = FileReadLine($file, -1)

$read = StringTrimLeft($read, 9)
$read = StringTrimRight($read, 1)

MsgBox(0, "Test", "Voici ta variable: " & $read)

FileClose($file)

Re: [..] Récupération variable dans un fichier texte

Posté : mer. 27 janv. 2010 01:41
par Alexpgm
Merci pour ton aide,

J'ai été voir tout ça, et je n'arrive pas a mon but, je vais donc essayer d'expliquer précisément ce que je veux ...

Alors, j'ai un fichier de log qui est édité au fur et a mesure.

Ce que je veux, récupérer une valeur numérique noté dans celui-ci.
Dans la ligne, la partie qui m'interesse se situe au 86ieme caractère en partant de la gauche, et se prolonge juste deux caractère avan la fin.

-> xxxx...xxxXXxx Je souhaite récupérer le nombre dans la ligne, et la mettre dans une variable.

Ce que j'ai fait :
- Ouverture du fichier avec ShellExecute -> Ok : un notepad.exe s'ouvre en processus...
- Je lis la dernière ligne avec FileReadLine option -1 pour dernière ligne
je l'écris comme ça : $lecture = FileReadLine($monfichier)
le problème est que je n'ouvre pas le fichier avec FileOpen, car il ne trouve pas mon fichier...Donc je ne sais pas si il arrive ou non a lire la ligne.
- Ensuite j'utilise la fonction string, sur ma variable $lecture pour me donner ma chaine de charactère.
-Après le séléctionne ce qui m'interesse, en coupant avec StringTrimLeft/Right pour ne garder que le nombre XX.
- Ensuite j'aimerais que ce nombre soit mis dans une variable.

Je sais qu'il y a des problème dans ma programmation, car vu que j'utilise String, ma donnée est donc de type caractère, comment la repasser en numérique avant de la renvoyer dans la variable finale pour faire des opération dessus?
Au niveau de l'ouverture de fichier: j'ai utilisé ShellExecute, car je peux donner l'emplacement du fichier, pas dans FileOpen a priori...

Voila j'espère avoir été assez clair, je reste vague, car je ne veux pas de programme tout fait, je voudrais le faire moi même.

En gros ce que j'ai besoin:

- Ouvrir un fichier .txt en tache de fond
- Récupérer sur la dernière ligne du .txt la valeur numérique (xxxxxxxxxxxxxxxxXXxx)
87 2 2
En Gras le nombre de caractère qui m'interesse, pour mieu le visualiser...

Je ne sais pas si la façon dont je m'y prend est la meilleur... Merci d'avance pour votre aide.

Re: [..] Récupération variable dans un fichier texte

Posté : mer. 27 janv. 2010 14:04
par Alexpgm
Merci de ton aide matwachich, je n'avais pas vu ta réponse...

J'ai essayé ton code, mais la variable ne s'affiche pas.

Je pense que c'est a cause de FileOpen, qui ne trouve pas le fichier, car il est dans un dossier spécifique : C:\Users\Alex\Documents\.......\......\Logs\

Merci d'avance.

Re: [..] Récupération variable dans un fichier texte

Posté : jeu. 28 janv. 2010 09:14
par Alexpgm
Personne ne peux m'aider?

matwachich, ta réponse ne fonctionne pas, le fichier ne s'ouvre pas, ou la variable n'est pas récupérée...
Je n'ai pas trouvé comment évoluer, as tu une idée?

Cordialement Alex

Re: [..] Récupération variable dans un fichier texte

Posté : jeu. 28 janv. 2010 11:22
par Iste
- Ouverture du fichier avec ShellExecute -> Ok : un notepad.exe s'ouvre en processus...
[...]
- Ensuite j'utilise la fonction string, sur ma variable $lecture pour me donner ma chaine de charactère.
innutile !
Le ShellExecute() vous permettra uniquement d'afficher le contenu du txt (a moins que vous le vouliez)
FileRead() renvoi déja une chaine de caractères.

1 - Faites un FileRead() ou un FileReadLine(). Pour vérifier ;

Code : Tout sélectionner

$ligne = FileReadLine("monfichier.txt")
MsgBox(0,'',$ligne)
2 - Récupérer le nombre a l'aide de StringRegExp().
Si vous ne savez pas vous en servir, regardez la doc.
Pour un texte de type "Aaaaa bbbb cccc (0123456789)" on doit pouvoir faire un

Code : Tout sélectionner

$number = StringRegExp($ligne,"([0-9])",1) ;A tester /!\
Votre nombre devrait se trouver dans $number[$number[0]] ou dans $number[UBound($number)-1] (a tester aussi)

Bonne chance

Re: [..] Récupération variable dans un fichier texte

Posté : jeu. 28 janv. 2010 14:42
par Alexpgm
Merci pour cette réponse, effectivement, un fichier s'ouvre, dans mon cas (teste.txt), le problème c'est que c'est celui de l'aide autoit qui s'ouvre, et non celui qui se trouve dans MesDocuments\.....\log.

En attendant une réponse, je vais me documenter sur StringRegExp().

Merci d'avance.

Ma ligne pour etre exacte est de la forme :

01/26/2010 18:32:50-- Xxxx xxxx xxxx xxxxxxx "Xxxxxx xx xxxxxxx xxxxxxx" (xx xx xxxxx 5).

Sachant que ma variable numérique varie de 1 a 3 chiffre, et ne concerve pas les 0, elle passe donc de par exemple 100 à 99, puis 9, puis 0.

Ce que je veux donc, c'est récupérer cette valeur, quelque soit sa taille, et l'envoyer dans une variable.

Re: [..] Récupération variable dans un fichier texte

Posté : jeu. 28 janv. 2010 16:25
par matwachich

Code : Tout sélectionner

#cs
Si par exemple ton fichier log s'appel log.txt et que la derniere ligne est de type: comme tu a dit!,
c'est à dire: 87-ta variable-2
#ce

#cs ### ca c'etait pour moi, juste pour tester ###
$file = FileOpen("log.txt", 2)
For $i = 1 To 87 Step 1
    FileWrite($file, "x")
Next
FileWrite($file, "86xx")
FileClose($file)
#ce ##############################################

$repertoir = "log.txt" ;- met le repertoire de ton fichier ici

$file = FileOpen($repertoir, 0)

$read = FileReadLine($file, -1) ;- on lit la derniere ligne
ConsoleWrite($read & @CRLF)

$read = StringTrimLeft($read, 87) ;- on enleve tout ce qui est AVANT le 88e caractere, ou les 87 premiers caracteres
ConsoleWrite($read & @CRLF)

$read = StringRegExpReplace($read, "\D", "") ;- on enleve (remplace par "") tous les caractere de type /D, c.a.d. les lettres (regarde la doc)
ConsoleWrite($read & @CRLF)

MsgBox(0, "Test", "Voici ta variable: " & $read)

FileClose($file)
#cs
On aurai pu ne pas faire le stringtrimleft et faire direct le stringregexpreplace, mais cette derniere enlevera uniquement les caracteres
de $read, et on ne sais pas s'il ya des chiffres dans les 87e premiers caracteres qui pourai fausser la variable
#ce

 

Re: [R] Récupération variable dans un fichier texte

Posté : jeu. 28 janv. 2010 22:29
par Alexpgm
Parfait, Merci de ton aide, sa marche au poil !