Page 1 sur 1

[R] Extraire des infos de fichiers Log.

Posté : ven. 28 mars 2008 13:44
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.

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

Posté : ven. 28 mars 2008 15:47
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)
 

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

Posté : ven. 28 mars 2008 15:54
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    

 

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

Posté : ven. 28 mars 2008 17:02
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 !

Re: [..]

Posté : ven. 28 mars 2008 17:11
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:

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

Posté : ven. 28 mars 2008 19:12
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

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

Posté : ven. 28 mars 2008 19:14
par alex65
Ou par :

Code : Tout sélectionner

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

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

Posté : ven. 28 mars 2008 22:01
par Tlem
Merci de respecter les règles du forum, en mettant un titre clair à vos questions.

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

Posté : dim. 30 mars 2008 18:04
par ram
Merci Alex65, je vais faire la correction du script... :wink:

Tlem, je ferai plus attention ! merci

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

Posté : dim. 30 mars 2008 21:14
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.

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

Posté : mer. 02 avr. 2008 21:19
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 ?

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

Posté : jeu. 03 avr. 2008 16:54
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:

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

Posté : jeu. 03 avr. 2008 20:13
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

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

Posté : jeu. 03 avr. 2008 20:59
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

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

Posté : jeu. 03 avr. 2008 23:05
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 ?

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

Posté : ven. 04 avr. 2008 00:32
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
 

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

Posté : ven. 04 avr. 2008 19:08
par alex65
Et bien oui, tout simplement... Merci encore Tlem :)