Reprendre la lecture d'un fichier .csv à partir de la dernière lecture effectuée

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Batouille18
Niveau 1
Niveau 1
Messages : 3
Enregistré le : mar. 21 févr. 2017 11:35
Status : Hors ligne

Reprendre la lecture d'un fichier .csv à partir de la dernière lecture effectuée

#1

Message par Batouille18 »

Bonjour à tous,

Je suis actuellement en train d'écrire un script AutoIt qui extrait les Events logs de Windows, tout en normalisant certains champs.

Ces données sont stockées dans un fichier .csv, qui sera ensuite envoyé dans une base de données SQLite afin de pouvoir interroger les Events.

J'ai besoin, pour mener mon projet à bien, de pouvoir reprendre la lecture de mon fichier .csv la ou le programme c'est arrêté, afin de gagner en temps d'exécution du script, mais surtout car cela est vraiment plus propre et professionnel.

Mon idée est de faire une boucle qui vérifie si la date de l'Event est plus veille que la date de la dernière exécution du script sur ce fichier .csv !

Mais après de nombreuses recherches et plusieurs tests, je n'arrive toujours pas à réaliser cela.

Quelqu'un aurait-il une idée ?

Merci d'avance.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: Reprendre la lecture d'un fichier .csv à partir de la dernière lecture effectuée

#2

Message par orax »

Bienvenue sur le forum.
J'aurais juste une autre idée à proposer. Au lieu de récupérer la date de la dernière exécution du script, je récupérerais la dernière ligne du fichier .csv. Je suppose que cette ligne contient les données qui indiquent à quel endroit le script s'est arrêté (dans l'extraction des logs) lors de sa dernière exécution.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Batouille18
Niveau 1
Niveau 1
Messages : 3
Enregistré le : mar. 21 févr. 2017 11:35
Status : Hors ligne

Re: Reprendre la lecture d'un fichier .csv à partir de la dernière lecture effectuée

#3

Message par Batouille18 »

Bonjour,

Merci pour l'accueil et pour votre réponse. Il semblerait en effet qu'il y ait quelque chose à creuser de ce côté la, je regarde cela et vous tiendrais au courant ici.

N'y aurait-il également quelque chose à faire autour du paramètre $iOffset de la fonction _EventLog_Read ?
Doc AutoIt3 - _EventLog_Read
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: Reprendre la lecture d'un fichier .csv à partir de la dernière lecture effectuée

#4

Message par orax »

Il y aurait peut-être une piste avec les bookmarking events. J'ai vu que le programme WEvtUtil peut en utiliser.
Et je suis également tombé sur cet outil en ligne de commande : Logparser qui pourrait peut-être convenir (voir l'option -i:EVT).
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
parazitenew
Niveau 7
Niveau 7
Messages : 310
Enregistré le : sam. 10 déc. 2011 15:08
Localisation : Algerie
Status : Hors ligne

Re: Reprendre la lecture d'un fichier .csv à partir de la dernière lecture effectuée

#5

Message par parazitenew »

Bonsoir,
Pourquoi ne pas mettre une colonne ID, à chaque exécution, le numéro ID est enregistré dans fichier texte externe. À la reprise, le script lit le nombre à partir du fichier texte et reprend la lecture du CSV à partir de cette ligne, remet à jour le chiffre et ainsi de suite.
Batouille18
Niveau 1
Niveau 1
Messages : 3
Enregistré le : mar. 21 févr. 2017 11:35
Status : Hors ligne

Re: Reprendre la lecture d'un fichier .csv à partir de la dernière lecture effectuée

#6

Message par Batouille18 »

Re-bonjour à tous,

La méthode retenue est de stocker le record number (qui est un numéro présent et unique sur chaque Event) dans un fichier .ini.

Je récupère ensuite cette valeur au début de ma boucle dans une variable, que j'appelle lors de mon _EventLog_Read en mentionnant ma variable récupérée dans le paramètre $iOffset
_EventLog__Read ( $hEventLog [, $bRead = True [, $bForward = True [, $iOffset = 0]]] )
Et à la fin de la boucle, je ré-ouvre mon fichier .ini en y inscrivant la valeur actuelle du dernier record number traité.

De cette manière, lorsque je ré-exécute mon code, celui-ci traite seulement les Events avec un record number plus grand que celui stocké dans mon fichier .ini.

Merci à vous pour votre aide.

J'attends un retour de votre part, dans le cas ou un bout de code vous est nécessaire pour une meilleure compréhension !!

Bonne journée :D
Répondre