Purge et tri d'un fichier log

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
gothgothhh
Niveau 2
Niveau 2
Messages : 28
Enregistré le : ven. 19 août 2011 13:03
Status : Hors ligne

Purge et tri d'un fichier log

#1

Message par gothgothhh »

Bonjour, quelque chose de paranormal m'est arriver ce matin, en faite, mon but est de supprimé des lignes d'un fichier sous condition d'avoir un string à l'interieur ou que la ligne soit vide, mais une fois le procédé terminé, le fichier out est plus lourd que le fichier in ... :shock: :shock: :shock: :shock:

Code : Tout sélectionner

#include <File.au3>
#include <Array.au3>

Global $temppurge = @ScriptDir & "\templog.log"
_Purge(@ScriptDir & "\log.log")
Func _Purge($filetopurge)
	local $aLines
	FileDelete($temppurge)
_FileReadToArray($filetopurge, $aLines)
For $i = $aLines[0] To 1 Step -1
;~ local $filter1 = StringInStr($aLines[$i],"")
;~ local $filter2 = StringInStr($aLines[$i],"")
    If $aLines[$i] = "" Then
        _ArrayDelete($aLines, $i)
    EndIf
;~   If $filter1 or $filter2 <> 0 Then
;~ 	  _ArrayDelete($aLines, $i)
;~ 	  EndIf
Next
_FileWriteFromArray($temppurge, $aLines, 1)
EndFunc

Quelqu'un saurait pourquoi le out sort plus lourd que le le in alors que j'y retire toutes les lignes vides(que sa ne change rien sur la taille je veux bien, mais là la taille augmente carrément :shock: ????

Et je n'arrive pas à trouver de solutions pour pouvoir mettre plusieurs filtres en les appelant avec la fonction comme ceci _Purge("le fichier","filtre1-filtre2-filtre3")
quelqu'un aurait une idée ?
Merci d'avance et à très vite !
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: Purge et tri d'un fichier log

#2

Message par orax »

Je n'ai pas ce comportement paranormal. Les lignes vides sont supprimées. Si ça ne marche pas, c'est peut-être la faute aux petits hommes verts... :mrgreen:
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
gothgothhh
Niveau 2
Niveau 2
Messages : 28
Enregistré le : ven. 19 août 2011 13:03
Status : Hors ligne

Re: Purge et tri d'un fichier log

#3

Message par gothgothhh »

C'est étonnant dès qu'il se met à filtré des fichiers de 500ko et plus, il y a de grosses différences alors que pourtant, le fichier contient effectivement plus aucunes lignes vides ... :evil:

tu n'aurais pas une solution pour mon problème de filtre multiples par hasard ? ^^
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Purge et tri d'un fichier log

#4

Message par mikell »

Tu pourrais utiliser une expression régulière, quelque chose comme ça (c'est pour le concept, il manque la gestion d'erreurs)

Code : Tout sélectionner

$str = "1aaa 1" &@crlf& "2 bbb$ 2" &@crlf&@crlf& "3 ccc3" &@crlf& _ 
	"4 ddd ? 4" &@crlf&@crlf& "5eee5" &@crlf& "6 fff + 6" &@crlf& "7ggg7"
Msgbox(0,"", $str)

; on enlève les lignes vides ou qui contiennent "bbb" ou "ddd" ou "fff"

$str = _clean($str, "bbb;ddd;fff")
Msgbox(0,"", $str)

Func _clean($txt, $filtre)
   $filtre = "\Q" & StringReplace($filtre, ";", "\E|\Q") & "\E"
   Return StringRegExpReplace($txt, '(?m)^(\s*|.*(?:' & $filtre & ').*)\R?', "")
EndFunc
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
gothgothhh
Niveau 2
Niveau 2
Messages : 28
Enregistré le : ven. 19 août 2011 13:03
Status : Hors ligne

Re: Purge et tri d'un fichier log

#5

Message par gothgothhh »

Impeccable tout fonctionne sur des roulettes merci bien !
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1037
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Purge et tri d'un fichier log

#6

Message par walkson »

Bonsoir,
Si je peux me permettre une intrusion sur ce post, j'ai quelques questions à poser:
Si je reprends le code de Mikell

Code : Tout sélectionner

$str = "1aaa 1" &@crlf& "2 bb b$ 2" &@crlf&@crlf& "3 ccc3" &@crlf& _
   "4 ddd ? 4" &@crlf&@crlf& "5eee5" &@crlf& "6 fff + 6" &@crlf& "7ggg7" & "dd def"


$str = _clean($str, "$;dd d;g")
ConsoleWrite($str & @CR)
Func _clean($txt, $filtre)
   $filtre = "\Q" & StringReplace($filtre, ";", "\E|\Q") & "\E"
   Return StringRegExpReplace($txt, '(?m)^(\s*|.*(?:' & $filtre & ').*)\R?', "=")
EndFunc
J'obtiens

Code : Tout sélectionner

=1aaa 1
====3 ccc3
=4 ddd ? 4
==5eee5
=6 fff + 6
==
Je suis d'accord avec le résultat sauf =1aaa 1 où il me retire quelque chose qui n'existe pas.
Par tâtons, j'ai essayé cela

Code : Tout sélectionner

$str = "1aaa 1" &@crlf& "2 bb b$ 2" &@crlf&@crlf& "3 ccc3" &@crlf& _
   "4 ddd ? 4" &@crlf&@crlf& "5eee5" &@crlf& "6 fff + 6" &@crlf& "7ggg7" & "dd def"


$str = _clean($str, "$;dd d;g")
ConsoleWrite($str & @CR)
Func _clean($txt, $filtre)
   $filtre = "\Q" & StringReplace($filtre, ";", "\E|\Q") & "\E"
   Return StringRegExpReplace($txt, '(?m)^(\s.*|.*(?:' & $filtre & ').*)\R?', "=")
EndFunc
et j'obtiens

Code : Tout sélectionner

1aaa 1
==3 ccc3
4 ddd ? 4
=5eee5
6 fff + 6
=
Le résultat est convenable mais je ne le comprends pas !
Si quelqu'un peut éclairer ma lanterne ? merci
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: Purge et tri d'un fichier log

#7

Message par mikell »

Ta solution ne convient pas parce qu'elle fait supprimer toute ligne qui commence par un espace, exemple : " 1aaa1"

Le résultat que tu obtiens avec mon code vient du fait que le \R final est optionnel et donc la 1ère alternative est toujours vraie quelle que soit la ligne (^\s* : la ligne commence par 0 ou plus espaces) et il y a donc systématiquement un "=" supplémentaire retourné au début
Dans le cas d' une suppression, ça peut être pratique parce que ça permet d'enlever aussi les espaces en début de ligne, et le fait qu'il y ait 2 matches pour la même ligne on s'en fout

Mais si tu veux faire un remplacement, comme mettre un "=" (ou ne pas supprimer les espaces en début de ligne) là c'est différent
On doit laisser le \R optionnel \R? pour que la dernière ligne puisse être traitée, donc la solution est de lui placer une ancre de fin de ligne $ juste avant : StringRegExpReplace($txt, '(?m)^(\s*|.*(?:' & $filtre & ').*)$\R?', "=")
La 1ère alternative ne matche alors que les lignes vides, et ça permet d'obtenir ton résultat convenable :wink:

Ouala... si j'ai dit une connerie jchd-sensei me remettra sur les rails :mrgreen:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
gothgothhh
Niveau 2
Niveau 2
Messages : 28
Enregistré le : ven. 19 août 2011 13:03
Status : Hors ligne

Re: Purge et tri d'un fichier log

#8

Message par gothgothhh »

Pour ceux que sa intéresse voilà comment je purge le fichier en supprimant les lignes vides et par detection de keyword
merci mikell !

Code : Tout sélectionner

#include <File.au3>
$file = @ScriptDir & "\log.txt"
$temppurge = @ScriptDir & "\templog.txt"
_Purge($file, "NOFILTERSET");"filter1;filter2"


Func _Purge($filetopurge, $filter) ;Purge blank lines and filter keywords
	Local $read = FileRead($filetopurge) ;Read file
	If Not @error Then ;Not error
		Local $str = _Filter($read, $filter) ;Stock filtered
		FileDelete($temppurge) ;Delete temp
		FileWrite($temppurge, $str) ;Write filtered to temp
		FileClose($read) ;Close file
		FileDelete($filetopurge) ;Delete file
		FileCopy($temppurge, $filetopurge) ;Copy temp to file
	EndIf
EndFunc   ;==>_Purge
Func _Filter($txt, $filtre) ;Filter a text with multiple keywords
	$filtre = "\Q" & StringReplace($filtre, ";", "\E|\Q") & "\E"
	Return StringRegExpReplace($txt, '(?m)^(\s*|.*(?:' & $filtre & ').*)\R?', "")
EndFunc   ;==>_Filter
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Purge et tri d'un fichier log

#9

Message par Tlem »

Bonjour gothgothhh.
Merci de mettre à jour votre adresse mail de contact dans votre profil, car mon hébergeur me signale des rejets de hotmail vous concernant. ^^
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é".
gothgothhh
Niveau 2
Niveau 2
Messages : 28
Enregistré le : ven. 19 août 2011 13:03
Status : Hors ligne

Re: Purge et tri d'un fichier log

#10

Message par gothgothhh »

Ah oui effectivement je n'ai pas utilisé hotmail depuis des années je vais mettre ma nouvelle desoler ^^
C'est fait !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11798
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Purge et tri d'un fichier log

#11

Message par Tlem »

Merci

Envoyé de mon appareil mobile avec Tapatalk
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