Purge fichiers txt - suppression de lignes en fonction d'une date de purge

Description

Problème de la taille des fichiers LOG (TXT) traçant toutes les erreurs durant l'exécution
d'un programme : le fichier grossit, grossit, grossit ...

=> proposition d'une fonction simple de suppression de lignes, en fonction d'une date de purge, avec la technique classique du Input - Output

ATTENTION, les 10 premiers caractères de chaque ligne du fichier LOG à purger sont une date formatée en jj/mm/aaaa.
Exemple de structure de fichier LOG de 2 lignes :
jj/mm/aaaa mon erreur ou infos
jj/mm/aaaa mon erreur2 ou infos2

Ce fichier LOG peut être créé par le code suivant :
'---------------------------------------------------------------------
iFile = FreeFile
Open sLogFile For Append Access Write Lock Write As iFile
sLogLine = Format(Now, "dd/mm/yyyy hh:mm:ss") & " > > " & sMessError
Print #iFile, sLogLine
Close iFile
'---------------------------------------------------------------------

La fonction est appelée de la manière suivante :
Call PurgeFichierLog("c:\toto.log", "01/01/2001")

Source / Exemple :


Public Function PurgeFichierLog(sNomFic As String, dDatePuge As Date) As Boolean

On Error GoTo lError

Dim lNumFicSrc As Long
Dim lNumFicDest As Long
Dim lCpteur As Long

Dim sNmFicDest As String
Dim sLine As String

Dim dDateImport_Log As Date

lCpteur = 0

lNumFicSrc = FreeFile
Open sNomFic For Input As lNumFicSrc

lNumFicDest = FreeFile
Open "c:\TmpFic.txt" For Output As lNumFicDest

Do While Not EOF(lNumFicSrc)

    Line Input #lNumFicSrc, sLine
    
    dDateImport_Log = Left(sLine, 10)
    
    If (dDateImport_Log > dDatePuge) Then
        Print #lNumFicDest, sLine
    Else
        lCpteur = lCpteur + 1
    End If

Loop

Close lNumFicSrc
Close lNumFicDest

Kill sNomFic
Name "c:\TmpFic.txt" As sNomFic

PurgeFichierLog = True

Exit Function
    
lError:
    PurgeFichierLog = False

End Function

Conclusion :


Merci à DragonDo, sa réponse et son source du 28/05/2002, pour une question de jpshowtime

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.