Supprimer les lignes vides dans un fichier texte

Soyez le premier à donner votre avis sur cette source.

Snippet vu 14 507 fois - Téléchargée 54 fois

Contenu du snippet

Le module va supprimer les lignes vides du fichier en entrée.
Le string passé en paramètre (fichier$) contient le chemin et le nom du fichier.

Source / Exemple :


' Fonction qui nettoie un fichier texte des blancs
Public Function VireLigneBlanche(fichier As String)
    ' Variables locales
    Dim buffer As String
    Dim fichier2 As String
    
    ' Prépare le nom du fichier2
    Call PrepareFichTemp(fichier, fichier2)
    
    ' Ouverture des fichiers
    Open fichier For Input As #1
    Open fichier2 For Output As #2
    
    ' Premiere lecture
    Line Input #1, buffer
    
    ' Boucle de traitement
    While EOF(1) = False
        ' Nettoie le buffer
        buffer = Trim(buffer)
        ' Si il n'est pas vide, copie dans le fichier temp
        If Len(buffer) > 0 Then Print #2, buffer
        ' Lecture suivante
        Line Input #1, buffer
    Wend
    
    ' Fermeture des fichiers
    Close #1
    Close #2
    
    ' Efface le fichier 1
    Kill (fichier)
    
    ' Renomme le fichier 2 pour remplacer le fichier 1
    Name fichier2 As fichier
End Function

' Prépare le chemin du fichier temporaire à partir du
' nom du premier fichier
Private Function PrepareFichTemp(fichier As String, fichier2 As String)
    ' Variables locales
    Dim chemin As String
    Dim pos As Integer
    Dim old_pos As Integer
    
    ' Trouve le dernier \
    pos = InStr(1, fichier, "\", vbBinaryCompare)
    While pos <> 0
        old_pos = pos
        pos = InStr(old_pos + 1, fichier, "\", vbBinaryCompare)
    Wend
    
    ' Extrait le chemin
    chemin = Left(fichier, old_pos)
    
    ' Sauvegarde le nom final
    fichier2 = chemin & "temp.txt"
End Function

Conclusion :


Le fonctionnement est simple, le fichier en entrée est lu ligne par ligne. Si une ligne est vide, elle n'est pas copiée dans le fichier temporaire de destination. Une fois le fichier source à sa fin, on l'efface et on renomme le fichier temporaire avec le nom du fichier source.

A voir également

Ajouter un commentaire

Commentaires

Toumar
Messages postés
7
Date d'inscription
jeudi 26 juillet 2007
Statut
Membre
Dernière intervention
29 octobre 2008
-
Merci pour ce code très utile ;)
jplafleur2003
Messages postés
1
Date d'inscription
lundi 10 novembre 2003
Statut
Membre
Dernière intervention
20 novembre 2006
-
Une erreur c'est glissé dans ce source, a chaque fois que le prog est lancé une ligne est omise a la fin du fichier resultat. la solution est la suivante, a la fin de la boucle on doit écrire la dernière ligne.

' Fonction qui nettoie un fichier texte des blancs
Public Function VireLigneBlanche(fichier As String)
' Variables locales
Dim buffer As String
Dim fichier2 As String

' Prépare le nom du fichier2
Call PrepareFichTemp(fichier, fichier2)

' Ouverture des fichiers
Open fichier For Input As #1
Open fichier2 For Output As #2

' Premiere lecture
Line Input #1, buffer

' Boucle de traitement
While EOF(1) = False
' Nettoie le buffer
buffer = Trim(buffer)
' Si il n'est pas vide, copie dans le fichier temp
If Len(buffer) > 0 Then Print #2, buffer
' Lecture suivante
Line Input #1, buffer
Wend
Print #2, buffer
' Fermeture des fichiers
Close #1
Close #2

' Efface le fichier 1
Kill (fichier)

' Renomme le fichier 2 pour remplacer le fichier 1
Name fichier2 As fichier
End Function

' Prépare le chemin du fichier temporaire à partir du
' nom du premier fichier
Private Function PrepareFichTemp(fichier As String, fichier2 As String)
' Variables locales
Dim chemin As String
Dim pos As Integer
Dim old_pos As Integer

' Trouve le dernier \
pos = InStr(1, fichier, "", vbBinaryCompare)
While pos <> 0
old_pos = pos
pos = InStr(old_pos + 1, fichier, "", vbBinaryCompare)
Wend

' Extrait le chemin
chemin = Left(fichier, old_pos)

' Sauvegarde le nom final
fichier2 = chemin & "temp.txt"
End Function
cs_joina
Messages postés
31
Date d'inscription
mardi 8 avril 2003
Statut
Membre
Dernière intervention
23 mai 2003
-
j'ai essayé le code et a chaque fois que je relance le comptage de ligne, mon fichier perd une ligne. Si quelqu'un sait pourquoi ça m'interesse.

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.