[..] Action suite à la lecture d'un fichier log

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
mafooley
Niveau 2
Niveau 2
Messages : 27
Enregistré le : dim. 24 août 2008 22:04
Status : Hors ligne

[..] Action suite à la lecture d'un fichier log

#1

Message par mafooley »

Bonjour à tous,

j'aimerai pouvoir copier des lignes d'un fichier log d'un logiciel de chat qui se complète en temps réel, en fonction de la personne qui écrit le message.
Les lignes s'affichent les unes à la suite des autres à la fin du fichier.

Imaginez 3 personnes discutant: pseudo1, pseudo2 et pseudo3

Je désire, par exemple, copier uniquement les lignes écrites par pseudo2.

Le script devrait alors analyser à chaque fois la dernière ligne du fichier et rechercher la chaîne de caractères "pseudo2 à écrit:"
Si cette chaîne est bien présente dans la ligne, la ligne doit être copier et coller dans un autre fichier texte.
L'ouverture et l'écriture du nouveau fichier texte ne pose pas de problème en soit, mais le reste...

Merci d'avance,

Maf
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

Re: [.] Action suite à la lecture d'un fichier log

#2

Message par jbnh »

Il faut savoir comment se présente la ligne pour chaque message.

(exemple : pseudo2 : blablabla)
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
Avatar du membre
mafooley
Niveau 2
Niveau 2
Messages : 27
Enregistré le : dim. 24 août 2008 22:04
Status : Hors ligne

Re: [..] Action suite à la lecture d'un fichier log

#3

Message par mafooley »

c'est de ce type:

<pseudo2> blablablablabla...
<pseudo1> blabla...
<pseudo2> bla...
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

Re: [..] Action suite à la lecture d'un fichier log

#4

Message par jbnh »

Code : Tout sélectionner

#include <string.au3>

;------------------------------------------------
$filename = 'test2.txt'
$filename2 = 'recup.txt'
$pseudo = '<pseudo1>'
;------------------------------------------------

$file = FileOpen($filename, 0)
$read = FileRead($file)
$line = StringSplit($read, @CR)

For $i = 1 To $line[0]

$var = FileReadLine($file, $i)
$newline = _StringBetween($var, $pseudo, @LF)
If IsArray ($newline) Then            
$text = $newline[0]
FileWrite($filename2, $text & @CRLF)
Endif

Next
FileClose($filename)
FileClose($filename2)
Ca marche pas et pourtant tout à l'air correct, pourquoi? :lol:
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

Re: [..] Action suite à la lecture d'un fichier log

#5

Message par jbnh »

Code : Tout sélectionner

#include <file.au3>
 
Dim $array
;-------------------------------------------
Dim $pseudo = "<pseudo1> "
$filename = 'test2.txt'
$filename2 = 'recup.txt'
;-------------------------------------------

_FileReadToArray($filename, $array)
For $X = 1 to $Array[0]
    If StringInStr($array[$X], $pseudo) Then
       $var = FileReadLine($filename, $X)
       $text = StringReplace($var, $pseudo, "")
       FileWrite($filename2, $text & @CRLF)    
    EndIf
Next
Voila une méthode qui marche.

Compléter les informations:
- test2.txt : fichier source

Code : Tout sélectionner

<pseudo2> blablablablabla...
<pseudo1> blabla... 
<pseudo2> bla...
<pseudo1> kiki  
- <pseudo1>: le pseudo de la personne dont on veut récupérer tout les phrases.
- recup.txt: le fichier avec les phrases de pseudo1

Ca ne marche que pour la configuration : <pseudo> texte


Oubliez pas de trouver l'erreur de mon premier script. Merci :)
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Action suite à la lecture d'un fichier log

#6

Message par Tlem »

jbnh a écrit :Oubliez pas de trouver l'erreur de mon premier script. Merci :)
Heuu il y en à plusieurs ... :lol:

Code : Tout sélectionner

$line = StringSplit($read, @CR)
Tu met l'ensemble du fichier en tableau pour connaitre uniquement le nombre de ligne !!! Pas trés logique. Il aurait mieux valut que tu travail direct sur le tableau à la recherche de $pseudo.
Ensuite, tu lit le fichier ligne par ligne à la recherche de $pseudo en utilisant _StringBetweenen. :shock: Pas trés fonctionnel !
D'autant plus que tu recherche une chaine entre $pseudo et un @LF (qui n'existe pas).
Dans ce cas, il aurait fallut faire ceci :

Code : Tout sélectionner

    $var = FileReadLine($file, $i) & @LF
    $newline = _StringBetween($var, $pseudo, @LF)
 
Voilà pour ton premier code.

En ce qui concerne le deuxième code, il est nettement plus simple, mais toujours pareil, tu utilise _FileReadToArray pour connaitre le nombre de ligne (pas logique car la macro @error est là pour ça !!!) et ensuite tu fait alternativement une lecture de fichier puis une écriture dans un autre fichier or ceci demande beaucoup de temps sur des fichiers de grandes importance. Il vaudrait mieux faire la lecture ligne par ligne comme tu le fait mais en utilisant le Handle du fichier et de mettre le résultat dans une chaine pour à la fin du traitement écrire le résultat dans le fichier.

Voici 3 manières d'utiliser ce code :
Solution N°1 :

Code : Tout sélectionner

#include <file.au3>
 
Dim $array
;-------------------------------------------
Dim $pseudo = "<pseudo1> ", $text
$filename = 'test2.txt'
$filename2 = 'recup.txt'
;-------------------------------------------

_FileReadToArray($filename, $array)
For $X = 1 to $Array[0]
    If StringInStr($array[$X], $pseudo) Then
       $text &= StringReplace($array[$X], $pseudo, "") & @CRLF
    EndIf
Next

FileWrite($filename2, $text)
Solution N°2 :

Code : Tout sélectionner

#include <file.au3>
 
;-------------------------------------------
Dim $pseudo = "<pseudo1> ", $i, $text
$filename = 'test2.txt'
$filename2 = 'recup.txt'
;-------------------------------------------

While 1
    $i += 1
    $var = FileReadLine($filename, $i)
    if @error = -1 Then ExitLoop
    
    If StringInStr($var, $pseudo) Then
       $text &= StringReplace($var, $pseudo, "") & @CRLF
    EndIf
WEnd

FileWrite($filename2, $text)
Et enfin,
Solution N°3 (La plus propre) :

Code : Tout sélectionner

#include <file.au3>
 
;-------------------------------------------
Dim $pseudo = "<pseudo1> ", $text
$filename = 'test2.txt'
$filename2 = 'recup.txt'
;-------------------------------------------

$file = FileOpen($filename, 0)

While 1
    $line = FileReadLine($file)
    If @error = -1 Then ExitLoop

    If StringInStr($line, $pseudo) Then
       $text &= StringReplace($line, $pseudo, "") & @CRLF
    EndIf
Wend

FileWrite($filename2, $text)    
FileClose($filename)
Je fait évidemment abstraction des tests d'ouverture de fichier ...
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

Re: [..] Action suite à la lecture d'un fichier log

#7

Message par jbnh »

J'espère qu'un jour, moi petit padawan, aurai ta puissance du grand jedi :lol:
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Action suite à la lecture d'un fichier log

#8

Message par Tlem »

jbnh a écrit :J'espère qu'un jour, moi petit padawan, aurai ta puissance du grand jedi :lol:
Rhooo, pourtant je n'ai pas beaucoup de connaissance par rapport à d'autres. ;)
Je serais plutôt padawan de deuxième année tout au plus (et encore). :mrgreen:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mafooley
Niveau 2
Niveau 2
Messages : 27
Enregistré le : dim. 24 août 2008 22:04
Status : Hors ligne

Re: [..] Action suite à la lecture d'un fichier log

#9

Message par mafooley »

Merci beaucoup, je vais essayer ça.
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [..] Action suite à la lecture d'un fichier log

#10

Message par timmalos »

Tlem a écrit :
jbnh a écrit :J'espère qu'un jour, moi petit padawan, aurai ta puissance du grand jedi :lol:
Rhooo, pourtant je n'ai pas beaucoup de connaissance par rapport à d'autres. ;)
Je serais plutôt padawan de deuxième année tout au plus (et encore). :mrgreen:
Alors la je suis pas d'accord... Si toi, t'es padawan de deuxième année, on est quoi nous?
Je te verrai plutôt dans le rôle de Yoda :)
Avatar du membre
jbnh
Niveau 11
Niveau 11
Messages : 1932
Enregistré le : ven. 02 mai 2008 14:54
Localisation : Bruxelles
Status : Hors ligne

Re: [..] Action suite à la lecture d'un fichier log

#11

Message par jbnh »

Dans le rôle de yoda, il est :lol:
Balise [..] devant votre requête en cours, [R] quand résolu | Pas de message concernant les bots !

Merci
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Action suite à la lecture d'un fichier log

#12

Message par Tlem »

timmalos a écrit :Alors la je suis pas d'accord... Si toi, t'es padawan de deuxième année, on est quoi nous?
Je te verrai plutôt dans le rôle de Yoda :)
Hummm je pense que vous vous mèprenez les amis, car mes connaissances sont très limitées (C'est surement par-ce que je passe du temps à chercher et à fouiller que je trouve les réponses mais surement pas grace à mes connaissances)
Sylvanie, Voodoo, Michel Claveau, moutelous et d'autres font surement partie de ceux qui ont le plus de connaissances sur ce forum mais je suis très largement loin derrière eux.
Enfin l'essentiel c'est de partager. ;)
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre