[R] Extraire des infos de fichiers Log.

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
ram
Niveau 1
Niveau 1
Messages : 6
Enregistré le : ven. 28 mars 2008 11:59
Status : Hors ligne

[R] Extraire des infos de fichiers Log.

#1

Message par ram »

bonjour,
besoin de votre aide... ! je voudrais à partir de deux fichier de Log extraire des informations identique dans les 2 fichier ....

Exemple Log1 : blabla
Log2 : blabla
Identique, écrit les dans un autre fichier !
et sinon pas identique ignore l'information...

Si une âme généreuse peu m'aider.... merci a vous.
Modifié en dernier par Tlem le ven. 04 avr. 2008 20:53, modifié 2 fois.
Raison : Ajout d'un titre !!!
alex65
Niveau 2
Niveau 2
Messages : 24
Enregistré le : ven. 27 juil. 2007 12:30
Status : Hors ligne

Re: [..] Extraire des infos de fichiers Log.

#2

Message par alex65 »

Bonjour,
Peut-être en passant par des tableaux :

Code : Tout sélectionner

#include <file.au3>
Dim $aRecords1
If Not _FileReadToArray("d:\log1.txt",$aRecords1) Then
   MsgBox(4096,"Error", " Error reading log to Array     error:" & @error)
   Exit
EndIf
Dim $aRecords2
If Not _FileReadToArray("d:\log2.txt",$aRecords2) Then
   MsgBox(4096,"Error", " Error reading log to Array     error:" & @error)
   Exit
EndIf
$file = FileOpen("d:\log3.txt", 1)
; Check if file opened for writing OK
If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
EndIf
For $x = 1 to $aRecords1[0]
    For $y = 1 to $aRecords2[0]
        If $aRecords1[$x]=$aRecords2[$y] then
             FileWriteLine($file, $aRecords1[$x])
        EndIf
    Next
Next
FileClose($file)
 
Modifié en dernier par alex65 le sam. 29 mars 2008 08:27, modifié 1 fois.
ram
Niveau 1
Niveau 1
Messages : 6
Enregistré le : ven. 28 mars 2008 11:59
Status : Hors ligne

Re: [..]à partir de deux fichier de Log extraire des information

#3

Message par ram »

Merci d'avoir répondu :wink:

Je n'arrive pas à finir une boucle

Code : Tout sélectionner

;~ -----------------------------------------
;~ Corps du programme
;~ -----------------------------------------

;~ Charger le fichier LOG dans un tableau
If Not _FileReadToArray("blabla1.csv", $tableauLOG) Then
   MsgBox(4096,"Error", " Error reading log to Array     error:" & @error)
   Exit
EndIf

If Not _FileReadToArray("blabla2.csv", $tableau1LOG) Then
   MsgBox(4096,"Error", " Error reading log to Array     error:" & @error)
   
   Exit
EndIf

FileDelete($ficherResultat)


;~ Lecture de toutes les lignes de $tableauLOG

For $x = 1 To $tableauLOG[0]
    For $x = 1 To $tableau1LOG[0]   
    If $tableauLOG[$x]<> $tableau1LOG[$x] = "" Then ContinueLoop
    $tableauTMP = StringSplit($tableauLOG[$x], ",") 
    $tableau1TMP = StringSplit($tableau1LOG[$x], ",")
    If $tableauTMP[1] <> $tableau1TMP[1] = "" Then
        ContinueLoop
    

    Else
            
            If StringUpper ($tableauTMP[1] and $tableau1TMP[1])  Then
            FileWriteLine("test.log",$tableauTMP[1] & ","& $tableauTMP[2] & ","& $tableau1TMP[1])
        EndIf
    EndIf


    Next
Next    

 
alex65
Niveau 2
Niveau 2
Messages : 24
Enregistré le : ven. 27 juil. 2007 12:30
Status : Hors ligne

Re: [..] Extraire des infos de fichiers Log.

#4

Message par alex65 »

Lorsqu'il y a 2 boucles comme là, il faut préciser le niveau à continueloop, soit 1 par défaut, soit 2.
Par contre, je pense que le fait d'utiliser 2 fois la variable $x aura pour conséquence de ne vérifier que les lignes portant le même numéro !
Modifié en dernier par alex65 le sam. 29 mars 2008 08:29, modifié 1 fois.
ram
Niveau 1
Niveau 1
Messages : 6
Enregistré le : ven. 28 mars 2008 11:59
Status : Hors ligne

Re: [..]

#5

Message par ram »

et vous le traduiriez comment dans le script ! Pardon je suis super novice chez novice ...
pour le bout de script plus haut 3jours de recherche :oops: :wink:
alex65
Niveau 2
Niveau 2
Messages : 24
Enregistré le : ven. 27 juil. 2007 12:30
Status : Hors ligne

Re: [..] Extraire des infos de fichiers Log.

#6

Message par alex65 »

Il faut corriger cette ligne :

Code : Tout sélectionner

If $tableauLOG[$x]<> $tableau1LOG[$x] = "" Then ContinueLoop
par

Code : Tout sélectionner

If $tableauLOG[$x]<> $tableau1LOG[$y] or $tableauLOG[$x]= "" Then ContinueLoop
Modifié en dernier par alex65 le sam. 29 mars 2008 08:30, modifié 1 fois.
alex65
Niveau 2
Niveau 2
Messages : 24
Enregistré le : ven. 27 juil. 2007 12:30
Status : Hors ligne

Re: [..] Extraire des infos de fichiers Log.

#7

Message par alex65 »

Ou par :

Code : Tout sélectionner

If $tableauLOG[$x]<> $tableau1LOG[$y] or $tableauLOG[$x]= "" Then ContinueLoop 2
Modifié en dernier par alex65 le sam. 29 mars 2008 08:30, modifié 1 fois.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Extraire des infos de fichiers Log.

#8

Message par Tlem »

Merci de respecter les règles du forum, en mettant un titre clair à vos questions.
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é".
ram
Niveau 1
Niveau 1
Messages : 6
Enregistré le : ven. 28 mars 2008 11:59
Status : Hors ligne

Re: [..] Extraire des infos de fichiers Log.

#9

Message par ram »

Merci Alex65, je vais faire la correction du script... :wink:

Tlem, je ferai plus attention ! merci
ram
Niveau 1
Niveau 1
Messages : 6
Enregistré le : ven. 28 mars 2008 11:59
Status : Hors ligne

Re: [..] Extraire des infos de fichiers Log.

#10

Message par ram »

Re :wink:

j'ai testé la solution d'alex...

Code : Tout sélectionner

If $tableauLOG[$x]<> $tableau1LOG[$y] or $tableauLOG[$x]= "" Then ContinueLoop

Rien ! il ne se passe rien!

parcontre si je reste avec la solution du départ avec 2 fois la variable $x

Code : Tout sélectionner

If $tableauLOG[$x]<> $tableau1LOG[$x] = "" Then ContinueLoop
j'ai bien un fichier test.log avec les infos des 2 fichiers logs à comparer ! mais la boucle ne s'arrete pas !!

une autre petite idée ? Merci à vous..

bye.
alex65
Niveau 2
Niveau 2
Messages : 24
Enregistré le : ven. 27 juil. 2007 12:30
Status : Hors ligne

Re: [..] Extraire des infos de fichiers Log.

#11

Message par alex65 »

Bonjour,

Je viens de tester ce code :

Code : Tout sélectionner

#include <file.au3>

;~ -----------------------------------------
;~ Corps du programme
;~ -----------------------------------------

;~ Charger le fichier LOG dans un tableau
Dim $tableauLOG
If Not _FileReadToArray("blabla1.csv", $tableauLOG) Then
   MsgBox(4096,"Error", " Error reading log to Array     error:" & @error)
   Exit
EndIf

Dim $tableau1LOG
If Not _FileReadToArray("blabla2.csv", $tableau1LOG) Then
   MsgBox(4096,"Error", " Error reading log to Array     error:" & @error)
   Exit
EndIf

;FileDelete($ficherResultat)

;~ Lecture de toutes les lignes de $tableauLOG

For $x = 1 To $tableauLOG[0] ; Boucle 1 - Pour chaque ligne de ce tableau
    For $y = 1 To $tableau1LOG[0]   ; Boucle 2 - On teste chaque ligne du deuxième
        If $tableauLOG[$x]<> $tableau1LOG[$y] or $tableauLOG[$x]= "" Then ContinueLoop ; Si les conditions sont vérifiées, il continue la boucle 2 avec une nouvelle valeur de y
                                                                                        ; Avec ContinueLoop 2, il continuerait la boucle 1 avec une nouvelle valeur de x
        $tableauTMP = StringSplit($tableauLOG[$x], ",")
        $tableau1TMP = StringSplit($tableau1LOG[$x], ",")
        If $tableauTMP[1] <> $tableau1TMP[1] or $tableauTMP[1]= "" Then
            ContinueLoop ; Si les conditions sont vérifiées, il continue la boucle 2 avec une nouvelle valeur de y
                        ; Avec ContinueLoop 2, il continuerait la boucle 1 avec une nouvelle valeur de x
        Else
            If StringUpper ($tableauTMP[1] and $tableau1TMP[1])  Then
                FileWriteLine("test.log",$tableauTMP[1] & ","& $tableauTMP[2] & ","& $tableau1TMP[1]) ; Attention, si les lignes ne contiennent pas de virgules => Erreur
            EndIf
        EndIf
    Next
Next
Il fonctionne sur mon poste mais j'ai peut-être mal compris la question ?
ram
Niveau 1
Niveau 1
Messages : 6
Enregistré le : ven. 28 mars 2008 11:59
Status : Hors ligne

Re: [..] Extraire des infos de fichiers Log.

#12

Message par ram »

Merci Alex... :D
Je me suis mal exprimée...
voilà ce que je cherche à faire... j'ai 2 fichiers logs
je voudrais constituer en un seul fichier log "test.log" et ensuite faire la comparaison d'information à l'intérieur de ce fichier!!... mais peux etre que je me complique la vie...
mon 1er fichier log1 à les informations suivante: "2colonne"
Marie, Nantes
Pierre, Paris
Marc, Brest
mon 2ème fichier à : "une seule colonne"
Marie
Pierre
Jean
comparaison Marie OK, Pierre OK, Jean NON
alors j'écris fichier "test.log" uniquement les infos suivantes
Marie, Nantes
Pierre, Paris

Mais peux etre que je me complique la vie et qu'il existe une solution autre !!
:wink:
alex65
Niveau 2
Niveau 2
Messages : 24
Enregistré le : ven. 27 juil. 2007 12:30
Status : Hors ligne

Re: [..] Extraire des infos de fichiers Log.

#13

Message par alex65 »

Alors, en reprenant les lignes du dessus on peu faire comme ça :

Code : Tout sélectionner

#include <file.au3>

;~ -----------------------------------------
;~ Corps du programme
;~ -----------------------------------------

;~ Charger le fichier LOG dans un tableau
Dim $tableauLOG
If Not _FileReadToArray("blabla1.csv", $tableauLOG) Then
   MsgBox(4096,"Error", " Error reading log to Array     error:" & @error)
   Exit
EndIf

Dim $tableau1LOG
If Not _FileReadToArray("blabla2.csv", $tableau1LOG) Then
   MsgBox(4096,"Error", " Error reading log to Array     error:" & @error)
   Exit
EndIf

;~ Lecture de toutes les lignes de $tableauLOG
For $x = 1 To $tableauLOG[0]
    $name=StringSplit($tableauLOG[$x], ",")
    For $y = 1 To $tableau1LOG[0]
        If $name[1] = $tableau1LOG[$y] and $name<> "" Then
            FileWriteLine("test.log",$tableauLOG[$x])
        EndIf
    Next
Next
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Extraire des infos de fichiers Log.

#14

Message par Tlem »

On peut aussi faire ceci :

Code : Tout sélectionner

#include <file.au3>
#include <Array.au3>

Dim $aArray1, $aArray2
Dim $Fic1 = "Log1.log"
Dim $Fic2 = "Log2.log"
Dim $Fic3 = "Log3.log"

If FileExists($Fic3) Then FileDelete($Fic3)

If Not _FileReadToArray($Fic1,$aArray1) Then
   MsgBox(4096,"Erreur", "Erreur de lecture du fichier " & $Fic1)
   Exit
EndIf
If Not _FileReadToArray($Fic2,$aArray2) Then
   MsgBox(4096,"Erreur", "Erreur de lecture du fichier " & $Fic2)
   Exit
EndIf

$File = FileOpen($Fic3, 1)

If $File = -1 Then
    MsgBox(0, "Erreur", "Impossible de créer le fichier de destination.")
    Exit
EndIf

For $i = 1 To $aArray2[0]
    $Pos = _ArraySearch ($aArray1, $aArray2[$i], 0, 0, 0, True)
    If $Pos <> -1 Then FileWriteLine($file, $aArray1[$Pos])
Next

FileClose($file)
Le code est plus long à cause du contrôle de la création du fichier Log3.log et des déclarations.
Cette partie peut être supprimée si : 'Même pas peur' :D

Le code épuré donne ceci :

Code : Tout sélectionner

#include <file.au3>
#include <Array.au3>

Dim $aArray1, $aArray2

If Not _FileReadToArray("Log1.log",$aArray1) Then
   MsgBox(4096,"Erreur", "Erreur de lecture du fichier Log1.log")
   Exit
EndIf
If Not _FileReadToArray("Log2.log",$aArray2) Then
   MsgBox(4096,"Erreur", "Erreur de lecture du fichier Log2.log")
   Exit
EndIf

For $i = 1 To $aArray2[0]
    $Pos = _ArraySearch ($aArray1, $aArray2[$i], 0, 0, 0, True)
    If $Pos <> -1 Then FileWriteLine("Log3.log", $aArray1[$Pos])
Next
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é".
alex65
Niveau 2
Niveau 2
Messages : 24
Enregistré le : ven. 27 juil. 2007 12:30
Status : Hors ligne

Re: [..] Extraire des infos de fichiers Log.

#15

Message par alex65 »

Oui merci Tlem, c'est mieux, je ne connaissais pas la fonction.
Par contre, comment on peut éviter l'inscription de la ligne si un prénom est égal à une ville ?
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11784
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [..] Extraire des infos de fichiers Log.

#16

Message par Tlem »

Modifiez la dernière partie du code comme ceci :

Code : Tout sélectionner

For $i = 1 To $aArray2[0]
    $Pos = _ArraySearch ($aArray1, $aArray2[$i], 0, 0, 0, True)
    If $Pos <> -1 Then 
        $name=StringSplit($aArray1[$Pos], ",")
        If $name[1] = $aArray2[$i] Then FileWriteLine("Log3.log", $aArray1[$Pos])
    EndIf
Next
 
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é".
alex65
Niveau 2
Niveau 2
Messages : 24
Enregistré le : ven. 27 juil. 2007 12:30
Status : Hors ligne

Re: [..] Extraire des infos de fichiers Log.

#17

Message par alex65 »

Et bien oui, tout simplement... Merci encore Tlem :)
Répondre