Epuration d'un fichier texte.

  • Initiateur de la discussion Initiateur de la discussion Troudz
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Troudz

XLDnaute Occasionnel
Bonjour à tous,

Voilà, j'ai un fichier texte qui, tout au long de la journée, se voit rajouter une plusieurs lignes selon le formation suivant :

- Le 11 juillet 2011 à 14h03 : Machin a fait ceci
- Le 11 juillet 2011 à 14h04 : Machine a fait celà
etc....

Je ne sais absolument pas comment manipuler les fichiers textes mais j'aimerai trouver une macro qui me permette d'épurer ce fichier en ne gardant que les actions des 3 ou 4 dernières années.

Est ce possible ?

Je vous remercie d'avance pour votre aide.
 
Re : Epuration d'un fichier texte.

Bonjour Troudz 🙂,
On appelle cela un fichier de log 🙄...
Pourquoi écrire une macro 😕 ?
Tu positionnes ton curseur au début du texte, tu utilises Ctr+f pour chercher la dernière date à effacer, avec la majuscule, tu sélectionnes le texte à supprimer, puis Suppr 😛...
Bon courage 😎
 
Re : Epuration d'un fichier texte.

Bien sur qu'une macro est idéale, mais pour proposer une solution, il faut que l'on ait une idée du fichier.
Supprimer les dates si j'ai bien compris est facile puisque l'on peut trouver l'emplacement du séparateur les deux points 🙂)
et on ne garde que la partie droite.
Exemple de macro
Sub Ote_la_date() ' on peut également fixer automatiquement les zones à travailler. Donner leur adresse à la place de sélection
For Each cellule In Selection
x = cellule.Formula
lesdeuxpoints = Application.Find(":", x) + 1 ' pour enlever l'espace qui suit
On Error Resume Next 'au cas où on ne trouve pas les deux points
cellule.Formula = Right(x, Len(x) - lesdeuxpoints) 'conservation de la partie droite
Next
End Sub
 
Re : Epuration d'un fichier texte.

Bonjour JNP,

On appelle cela un fichier de log 🙄...
Oui effectivement tu as raison ! 😀

Pourquoi écrire une macro 😕 ?
Parce que chaque jour, ce fichier est enrichi d'une à plusieurs centaines de lignes. La CNIL ne veut pas que l'on garde un historique trop long et préfère que cette suppression soit automatique et systématique. On m'a donc demandé de faire une macro pour gérer tout ça.

Tu positionnes ton curseur au début du texte, tu utilises Ctr+f pour chercher la dernière date à effacer, avec la majuscule, tu sélectionnes le texte à supprimer, puis Suppr 😛...
Merci beaucoup pour l'info ! Tu crois qu'il faut que je fasse Ctrl + S avant de sortir ? 😛
Je suis bête mais quand même pas à ce point. Enfin....... j'espère ! 😛😛😛
 
Re : Epuration d'un fichier texte.

Bonjour Troudz, Bonjour JNP 🙂, Bonjour hellnar,

Je suis bête mais quand même pas à ce point

Ne te vexe pas, ton niveau n'est pas écrit sur ton pseudo 😉

Et pourquoi une macro Excel ? Est-ce que passer par Excel représente une plus-value pour toi ?
S'il s'agit juste de purger ton fichier de log, un script VBS pourrait également le faire ?
 
Re : Epuration d'un fichier texte.

Re 🙂, salut TotoTiti,
Merci beaucoup pour l'info ! Tu crois qu'il faut que je fasse Ctrl + S avant de sortir ? 😛
Je suis bête mais quand même pas à ce point. Enfin....... j'espère ! 😛😛😛
Le fait que tu ne parles pas directement de log m'a induit en erreur, et je ne voulais pas te vexer, juste te rendre service 🙄...
Tu n'as pas mis au début que tu voulais, chaque jour, supprimer les données de la journée An-3 ou An-4, ce qui m'aurait éviter d'être un peu simpliste dans ma réponse 😛...
Si tu regardes sur le forum, tu verras qu'il y a souvent des réponses simples, alors que le demandeur partait sur du très compliqué 🙄...
Si je regarde ton problème, il y a plusieurs choses qui attirent mon attention :
1) Le fichier de log n'est-il pas occupé par l'application qui le génère ?
2) Combien pèse-t'il (un paquet de méga, non ?) ?
3) S'écrit-il par le haut ou par le bas ?
A + 😎
 
Re : Epuration d'un fichier texte.

Bien sur qu'une macro est idéale
C'est même obligatoire dans mon cas.


mais pour proposer une solution, il faut que l'on ait une idée du fichier.
J'ai fait une petite faute dans mon premier message. En fait TOUTES les lignes de ce fichier log (tu as vu JNP, j'ai retenu la leçon ? 😛) sont à ce format là :

- Le 11/07/2011 à 14h03 : Machin a fait ceci
- Le 11/07/2011 à 14h04 : Machine a fait celà

ça doit simplifier un peu les choses que ça soit au format jj/mm/aaaa.

Pour "repérer" la date dans la ligne, je sais à peu près faire.
Ce qui me gène, c'est que je ne sais pas comment traiter le fichier "ligne par ligne"

D'après ce que j'ai pu lire, on peut l'importer dans une collection pour le traiter. Mais apparement, les collections ne sont indexées....
 
Re : Epuration d'un fichier texte.

@ Tototiti et JNP : j'avais effectivement peur que ma réponse soit prise pour de l'agacement alors que ce n'est pas du tout le cas. J'avais simplement relevé le côté humoristique de la réponse de JNP et je tenais à être sur le même ton. C'est d'ailleurs pour ça que j'avais rajouté le "Enfin.... j'espère !".

Je ne suis donc pas du tout vexé, bien au contraire.

Sinon, pour le dernier message de JNP :
1) Non d'après ce que j'ai pu voir, il ne semble pas être occupé entre 2 écritures.
2) A ce jour, il pèse quelques dizaines de Ko car je l'ai "salement" épuré.
3) Il s'écrit par le bas.

Edit : Je pense avoir trouvé la macro qui imprime dans le fichier Log :

Code:
Sub PrintLog(MsLog As String)
    Open FLog For Append As #1
    Print #1, "Le " & VBA.Format(Date, "dd/mm/yyyy") & " à " & VBA.Format(Now, "hh:mm:ss") & " " & MsLog
    Close #1
End Sub

La variable Flog désigne le chemin pour accéder au fichier Log et est définie à l'ouverture de l'application.
 
Dernière édition:
Re : Epuration d'un fichier texte.

Re,

en effet, ça simplifie plutôt les choses
Il ne reste plus qu'à répondre à

1) Le fichier de log n'est-il pas occupé par l'application qui le génère ?
2) Combien pèse-t'il (un paquet de méga, non ?) ?
et

Et pourquoi une macro Excel ? Est-ce que passer par Excel représente une plus-value pour toi ?
S'il s'agit juste de purger ton fichier de log, un script VBS pourrait également le faire ?

Edit : Bing, désolé pour la collision 🙂
 
Re : Epuration d'un fichier texte.

Edit : Bing, désolé pour la collision 🙂

Désolé c'est de ma faute, je commence à écrire mon message, puis coup de fil, puis visite d'un collègue etc... Du coup j'envoi mon message avec une demi heure de décallage 😡. Pas pratique pour discuter convenablement.

Concernant la nécessité de passer par Excel, j'oublie de vous dire l'essentiel. L'application qui génère ce fichier Log est en Excel / VBA. Je voudrais donc pouvoir intégrer une macro de plus pour lancer cette épuration à chaque démarrage de l'application (par exemple).
 
Dernière édition:
Re : Epuration d'un fichier texte.

Re,

à tester (sauvegarde ton fichier Log 😉)

Code:
Sub EpurFicLog(FLog As String)
Dim FSO, Fic, Fic2, Dat As Date, DatLigne As Long, Ligne As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Fic2 = FSO.createtextfile(FLog & "-2", True)
    Set Fic = FSO.opentextfile(FLog, 1, False, -2)
    Dat = DateSerial(Year(Date) - 1, Month(Date), Day(Date))
    Do Until Fic.atendofstream
        Ligne = Fic.readline
        DatLigne = CDate(Mid(Ligne, 4, 10))
        If DatLigne >= Dat Then
            Fic2.writeline Ligne
        End If
    Loop
    Fic.Close
    Fic2.Close
    Set Fic = Nothing
    Set Fic2 = Nothing
    Set FSO = Nothing
    Kill FLog
    Name FLog & "-2" As FLog
End Sub

Edit : en l'état, ne conserve que la dernière année !
 
Dernière édition:
Re : Epuration d'un fichier texte.

Re 🙂,
Je pensais suivre le même raisonnement en procédure Open #1, mais bon, c'est pas la peine vu que TotoTiti a déjà fini 🙄...
Par contre, vu que les logs se suivent, est-ce qu'il ne serait pas plus rapide de ne faire d'abord que le test, puis une fois celui-ci validé, de ne faire que la lecture écriture 😛...
Bonne fin de journée 😎
 
Re : Epuration d'un fichier texte.

Re 🙂,
A po compris 😀
Vu qu'il s'écrit par le bas, au lieu de faire à chaque ligne le test et s'il est positif, écrire la ligne dans le deuxième fichier, il me paraitrait plus rapide de ne faire que le test tant qu'on n'est pas arrivé à la date souhaitée, puis écrire toutes les lignes ensuite sans faire de test 🙄...
Capito 😛 ?
A + 😎
 
Re : Epuration d'un fichier texte.

Re,

Ah OK OK OK 😉

un truc comme ça alors ?

Code:
Sub EpurFicLog(FLog As String)
Dim FSO, Fic, Fic2, Dat As Date, DatLigne As Long, Ligne As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Set Fic2 = FSO.createtextfile(FLog & "-2", True)
    Set Fic = FSO.opentextfile(FLog, 1, False, -2)
    Dat = DateSerial(Year(Date) - 1, Month(Date), Day(Date))
    Do Until Fic.atendofstream Or DatLigne >= Dat
        Ligne = Fic.readline
        DatLigne = CDate(Mid(Ligne, 4, 10))
    Loop
    Do Until Fic.atendofstream
        Fic2.writeline Ligne
        Ligne = Fic.readline
    Loop
       Fic2.writeline Ligne
    Fic.Close
    Fic2.Close
    Set Fic = Nothing
    Set Fic2 = Nothing
    Set FSO = Nothing
    Kill FLog
    Name FLog & "-2" As FLog
End Sub
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Retour