Segmenter un fichier texte importé en plusieurs morceaux?

Bonjour

Je cherche à automatiser la séparation du fichier LOG tel que l'exemple ci-contre

en plusieurs petit fichier LOG dont le contenu de chaque petit fichier serai variable mais délimité entre deux bornes tel que :

  • *USR:DEBUT* (ex : [OCT 30 2017 21:15:51]: USR:DEBUT ESCADA SAPPHIRE 50 ML)
  • *USR:FIN* (ex : [NOV 03 2017 12:35:30]: USR:FIN ESCADA SAPPHIRE 50 ML)
Je n'ai encore rien trouver qui me permettrai d'automatiser ce processus ni dans excel ni hors d'excel

Merci d'avances de vos réponses

Bonjour,

je suis incapable d'ouvrir votre fichier.log

pourriez-vous joindre une copie au format .txt ?

Bonjour Reclaimer, sabV

Comment voudrais-tu pouvoir "tronçonner" ce fichier ?

Est-ce que si une image "humaine" du fichier est présentée et que tu sélectionne les bornes pour faire plusieurs "petit log" conviendrait ?

Cette solution permettrait éventuellement de pouvoir filtrer rapidement ton "gros log" pour délimiter les tronçons

capture 20171111 001
sabV a écrit :

Bonjour,

je suis incapable d'ouvrir votre fichier.log

pourriez-vous joindre une copie au format .txt ?

Bonjour sabV!

Ci-joint le log en .txt en espérant que ça marche.

Bonjour à tous,

Tu peux avoir plusieurs USR:DEBUT avant un USR:FIN.

Chaque USR:DEBUT est le début d'un nouveau fichier où il faut vraiment attendre USR:FIN ?

Que fais-tu des lignes entre un USR:FIN et un USR:DEBUT ?

eric

NCC 1701 a écrit :

Bonjour Reclaimer, sabV

Comment voudrais-tu pouvoir "tronçonner" ce fichier ?

Est-ce que si une image "humaine" du fichier est présentée et que tu sélectionne les bornes pour faire plusieurs "petit log" conviendrait ?

Cette solution permettrait éventuellement de pouvoir filtrer rapidement ton "gros log" pour délimiter les tronçons

Bonjour,

Je ne suis pas trop sûre de ce que vous voulez dire par "une image humaine".

Le log est écrit dans un ordre chronologique. Quand un programme est lancé la machine écrit :

[OCT 30 2017 21:15:51]: USR:DEBUT [NOM PROGRAMME]

et une fois le programme terminé elle écrit:

[NOV 02 2017 11:13:34]: USR:FIN [NOM PROGRAMME]

Mon but est de récupérer dans un nouveau Log ou un tableau excel tout ce qui est compris entre 2 bornes d'un programme, de l'extraire dans un nouvel onglet excel avec un onglet par programme, dans un premier temps.

Quelqu'un m'a dit que POWERQUERY serait peut-être une solution à ce problème mais je n'ai pas encore pu vérifier.

eriiic a écrit :

Bonjour à tous,

Tu peux avoir plusieurs USR:DEBUT avant un USR:FIN.

Chaque USR:DEBUT est le début d'un nouveau fichier où il faut vraiment attendre USR:FIN ?

Que fais-tu des lignes entre un USR:FIN et un USR:DEBUT ?

eric

Bonjour eriic,

eriiic a écrit :

Tu peux avoir plusieurs USR:DEBUT avant un USR:FIN.

Cela peut arriver et est causé par l'absence d'un USR:FIN.

eriiic a écrit :

Chaque USR:DEBUT est le début d'un nouveau fichier où il faut vraiment attendre USR:FIN ?

Chaque USR:DEBUT pourrait être le début d'un nouveau fichier/tableau je ne pense pas que cela gênerait.

eriiic a écrit :

Que fais-tu des lignes entre un USR:FIN et un USR:DEBUT ?

Ces lignes peuvent être jeter. Toutes les lignes qui m'intéresse sont sous ce format :

[NOV 02 2017 11:13:34]: USR:[Message d'erreur]

Toutes les lignes qui m'intéresse sont sous ce format :

[NOV 02 2017 11:13:34]: USR:[Message d'erreur]

Ce qui veut dire éliminer toutes les lignes ne commençant pas par USR:

Tu confirmes ?

eriiic a écrit :

Toutes les lignes qui m'intéresse sont sous ce format :

[NOV 02 2017 11:13:34]: USR:[Message d'erreur]

Ce qui veut dire éliminer toutes les lignes ne commençant pas par USR:

Tu confirmes ?

En l'état le tableau excel de traitement du Log entier les ignores mais elles peuvent être pertinentes afin de déterminer les causes de certains problèmes. Donc pas forcément .

Mais les lignes entre une Fin et un Debut ne sont pas intéressantes pour l'analyse programme par programme.

On ne travaille pas en logique floue avec excel.

Chaque USR:DEBUT pourrait être le début d'un nouveau fichier/tableau

C'est oui ou non, à la limite une fois sur x, pas peut-être. Alors ?

En l'état le tableau excel de traitement du Log entier les ignores mais elles peuvent être pertinentes afin de déterminer les causes de certains problèmes. Donc pas forcément

idem. Soit on garde tout, soit on rejette tout, soit on ne garde que celles qui répondent à un critère précis.


EDIT : un début en attendant d'autres détails éventuels.

USR:DEBUT crée toujours un nouveau sous-fichier log

USR:FIN ou USR:DEBUT le ferme

Les lignes entre USR:FIN et USR:DEBUT sont toutes supprimées.

Les lignes après USR:DEBUT sont toutes conservées.

Les sous-fichiers log sont nommés nomFichier_xxx.log, dans le même répertoire que le fichier source.

3decoupe-log.xlsm (19.68 Ko)

C'est oui ou non, à la limite une fois sur x, pas peut-être. Alors ?

Le Top du Top serait que chaque USR:DEBUT avec le même nom de programme soit dans le même fichier Log et que les parties du même log programme commencent avec USR:DEBUT et finissent avec USR:FIN. En espérant que ça ne soit pas trop embêtant/compliqué à programmer.

idem. Soit on garde tout, soit on rejette tout, soit on ne garde que celles qui répondent à un critère précis.

C'est mieux de tout garder.

J'ai essayé de tester votre programme mais j'ai un message d'erreur

message d erreur decoupe log

qui pointe cette ligne de code.

debogage erreur decoupe log

Merci de votre réponse!

Le Top du Top serait que chaque USR:DEBUT avec le même nom de programme soit dans le même fichier Log

En premier j'ai : USR:DEBUT ESCADA SAPPHIRE 50 ML

Ensuite d'autres programmes s'intercalent, puis je retrouve plusieurs USR:DEBUT ESCADA SAPPHIRE 50 ML dispersés à nouveau.

Est-ce qu'il faut ajouter ces lignes en totalité au premier sous-fichier ESCADA SAPPHIRE 50 ML ?

Ou bien garder ouvert tant qu'on rencontre des USR:DEBUT ESCADA SAPPHIRE 50 ML mais fermer si un autre programme s'intercale ?

et que les parties du même log programme commencent avec USR:DEBUT et finissent avec USR:FIN

Ca, je met USR:FIN quand je le trouve.

J'ai essayé de tester votre programme mais j'ai un message d'erreur

C'est normal. J'ai testé avant pour voir si un traitement d'erreur était nécessaire, mais j'ai oublié de sauvegarder après l'avoir ajouté.

Corriger en :

On Error Resume Next
Kill Dir(fich & "_" & Format(numLog, "000") & ".log")
On Error GoTo 0

si tu veux voir ce que ça donne pour l'instant.

eric

Bonjour

En premier j'ai : USR:DEBUT ESCADA SAPPHIRE 50 ML

Ensuite d'autres programmes s'intercalent, puis je retrouve plusieurs USR:DEBUT ESCADA SAPPHIRE 50 ML dispersés à nouveau.

Est-ce qu'il faut ajouter ces lignes en totalité au premier sous-fichier ESCADA SAPPHIRE 50 ML ?

Ou bien garder ouvert tant qu'on rencontre des USR:DEBUT ESCADA SAPPHIRE 50 ML mais fermer si un autre programme s'intercale ?

Il faudrait que chaque sous fichier ai toutes les lignes appartenant à leur programme (exemple : sous fichier escada avec toutes les périodes DEBUT et FIN compris).

C'est normal. J'ai testé avant pour voir si un traitement d'erreur était nécessaire, mais j'ai oublié de sauvegarder après l'avoir ajouté.

Corriger en :

On Error Resume Next
Kill Dir(fich & "_" & Format(numLog, "000") & ".log")
On Error GoTo 0

si tu veux voir ce que ça donne pour l'instant.

Je vous confirme que ça marche maintenant.

Bonjour,

Il faudrait que chaque sous fichier ai toutes les lignes appartenant à leur programme (exemple : sous fichier escada avec toutes les périodes DEBUT et FIN compris).

Fait. Ca a l'air de ressembler à quelque chose, je te laisse contrôler en profondeur.

Je me base sur le 1er mot du sous-programme, sont-ils bien tous différents ou faut-il utiliser le nom complet ?

A l'appel d'un sous-programme j'insère une ligne style "*** Appel TIFFANY ***"

Si ça gène plus que ça aide, supprimer :

If fileNum <> 0 Then Write #fileNum, "*** Appel " & tmp(5) & " ***"

eric

Bonjour,

Fait. Ca a l'air de ressembler à quelque chose, je te laisse contrôler en profondeur.

Je me base sur le 1er mot du sous-programme, sont-ils bien tous différents ou faut-il utiliser le nom complet ?

Il faudrai se baser sur le nom complet du programme car il est assez commun d'avoir un programme avec un nom très similaire.

Sinon c'est parfait .

Merci de ton aide!

Bonjour,

si tu peux avoir des caractères interdits (comme \ : etc) dans les noms de fichier il faudra les remplacer ici :

prg = Mid(s, 35)

eric

C'est parfait!

pour ton aide!

Salut!

Désolé de déterrer ce topic mais j'ai un problème avec la macro de découpage de log .

J'ai cette erreur:

erreur decoupe 1

Qui point vers cette ligne:

erreur decoupe 2

et si je met en commentaire toutes cette partie

erreur decoupe 3

ça me donne une autre erreur

erreur decoupe 4

qui pointe sur cette ligne

erreur decoupe 5

mais les sous fichier log sont créer (en partie)

erreur decoupe 6

et dès que la macro est arréter

erreur decoupe 8

les fichiers se remplissent/completent

erreur decoupe 7

Voila le fichier excel ainsi que 3 log : celui qui marche et deux qui ne marche pas

5decoupe-log.xlsm (17.02 Ko)
4logs.7z (292.23 Ko)

Merci d'avance de ta réponse et désolé de déterré ce topic.

Bonjour,

désolé pour le délai mais je n'ai pas beaucoup de temps pour excel en ce moment.

Tes log défectueux n'ont pas de ligne USR:DEBUT qui permettrait de créer le fichier concerné, et on se retrouve à vouloir écrire dans un fichier non ouvert.

Ajouter au début du fichier log " USR:DEBUT xxxxxx", en mettant le nom du fichier destination derrière si tu veux quand même conserver ces premières lignes.

Ou bien remplacer :

                Case "USR:FIN"
                    Write #fileNum, s
                    ecritureOn = False

par :

               Case "USR:FIN"
                    If ecritureOn Then Write #fileNum, s
                    ecritureOn = False

pour que ces premières lignes aillent à la poubelle.

eric

Bonjour,

Merci de votre réponse. le premier problème a été résolu mais il reste une erreur

Erreur Découpe 4.png

qui pointe sur cette ligne

Erreur Découpe 5.png

mais les sous fichier log sont créer (en partie)

Erreur Découpe 6.png

et dès que la macro est arréter : Erreur Découpe 8.png

les fichiers se remplissent/completent

Erreur Découpe 7.png

Merci d'avance de ta réponse

Rechercher des sujets similaires à "segmenter fichier texte importe morceaux"