Txt

Résolu
dodo1309 Messages postés 218 Date d'inscription mercredi 17 mai 2006 Statut Membre Dernière intervention 30 mai 2011 - 24 oct. 2006 à 19:21
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 25 oct. 2006 à 02:11
Bonjour

je cherche un code qui me supprimerai toute les lignes blanches d'un fichier *.txt

merci d'avance 

dodo1309

14 réponses

kakenette Messages postés 218 Date d'inscription dimanche 1 mai 2005 Statut Membre Dernière intervention 15 novembre 2009 1
24 oct. 2006 à 20:25
Peut etre ceci ?


Function EffacerLignesBlanches(CheminFichier As String)

Dim A$

Dim TxTFichier As String


    ' Ouverture du fichier pour y extraire le texte

    Open CheminFichier For Input As #1

        Do Until EOF(1)

        Input #1, A$

        TxTFichier = TxTFichier & A$ & vbCrLf

        Loop

    Close #1

   

    ' Supprime les espaces contenue dans "TxTFichier"

    TxTFichier = Replace(TxTFichier, vbCrLf & vbCrLf, vbCrLf)

   

    ' Enregistre les nouvelle modifications

    Open CheminFichier For Output As #1

    Print #1, TxTFichier

    Close #1

   

    'Envoie un petit message de confirmation

    MsgBox "Fichier traité avec succès!", vbInformation

   

End Function


---------------------


Tu l'utilise comme ca :


  EffacerLignesBlanches "C:\...\TonText.txt"


.... si je me trompe pas ... est-ce donc ca ?

kakenette
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
24 oct. 2006 à 20:30
Salut,

essaie ceci :

Option Explicit

Private Sub Exemple_Procedure()
    Dim strFile             As String
    Dim strText             As String
    Dim strParseText()      As String
    Dim strMyCollection()   As String
    Dim ff                  As Integer
    Dim i                   As Long
    Dim lNb                 As Long
    Dim lCounter            As Long
    
strFile = "C:\Chemin\NomFichier.txt"
ff = FreeFile

Open strFile For Input As #ff
    strText = Input(LOF(ff), #ff)
Close #ff

strParseText() = Split(strText, vbCrLf): lNb = UBound(strParseText): lCounter = 0
    ReDim strMyCollection(lNb)
    
For i = 0 To lNb
    If Not strParseText(i) = "" Then _
        strMyCollection(lCounter) = strParseText(i): lCounter = lCounter + 1
Next i

Open strFile For Output As #ff
    For i = 0 To lCounter - 1
        Print #ff, strMyCollection(i)
    Next i
Close #ff
    Erase strParseText: Erase strMyCollection
End Sub


--Mortalino--

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
3
kakenette Messages postés 218 Date d'inscription dimanche 1 mai 2005 Statut Membre Dernière intervention 15 novembre 2009 1
24 oct. 2006 à 20:32
Je trouve pas fameux de faire un "Sub" pour ce genre de procédure surtout que ton " strFile = "C:\Chemin\NomFichier.txt" " n'ai pas trop aventageux...

kakenette
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
24 oct. 2006 à 20:35
kakenette, ta fonction est plus courte, certe, mais je suis navré de dire que si plusieurs lignes blanches (3) se trouvent à la suite, il en restera une. (testé)

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
3

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
24 oct. 2006 à 20:37
Désolé, écrit en même temps, c'est vrai qu'une fonction aurait été mieux, mais je l'ai testé par la sub form_load, et j'ai omis de le modifier.

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
24 oct. 2006 à 20:48
dsl de venir foutre la merde, mais pourquoi un sub n'est pas bien? pourquoi une fonction serait mieux ????

Le code de kakenette ne retourne absolument aucune valeur, ça pourrait très bien etre un sub, et je dirais même ça serait mieux.
Pourquoi faire une focntion si on ne retourne pas de valeur ???

La seule qui me va pas dans le sub de mortalino, c'est le nom du fichier, passé en argument ça aurait été mieux (même en conservant le sub)

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
24 oct. 2006 à 20:53
Salut Casy,

et je rajouterai que dans mon code il manque une chose tout aussi essentielle : la gestion des espaces.
Si la ligne vide est en fait un (ou plusieurs) espace(s), cette "ligne vide" réapparaitra après traitement.

Il faudra donc y penser

Sinon, je suis absolument d'accord pour le nom du fichier en argument !

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
3
mortalino Messages postés 6786 Date d'inscription vendredi 16 décembre 2005 Statut Membre Dernière intervention 21 décembre 2011 18
24 oct. 2006 à 20:59
On recommence, avec le nom du fichier en argument, et la gestion des espaces :

Option Explicit

' pour l'appeler :
' Call
Exemple_Procedure("C:\chemin\NomFichier.txt")

Private Sub Exemple_Procedure(ByVal strFile As String)
    Dim strText             As String
    Dim strParseText()      As String
    Dim strMyCollection()   As String
    Dim ff                  As Integer
    Dim i                   As Long
    Dim lNb                 As Long
    Dim lCounter            As Long
    
ff = FreeFile

Open strFile For Input As #ff
    strText = Input(LOF(ff), #ff)
Close #ff

strParseText() = Split(strText, vbCrLf): lNb = UBound(strParseText): lCounter = 0
    ReDim strMyCollection(lNb)
    
For i = 0 To lNb
    If Not strParseText(i) = "" Then
        ' *** rajout de la gestion des espaces
ici
        If Not strParseText(i) = Space(Len(strParseText(i))) Then _
            strMyCollection(lCounter) = strParseText(i): lCounter = lCounter + 1
    End If
Next i

Open strFile For Output As #ff
    For i = 0 To lCounter - 1
        Print #ff, strMyCollection(i)
    Next i
Close #ff
    Erase strParseText: Erase strMyCollection
End Sub


--Mortalino--

@++

<hr size="2" width="100%" />
  --Mortalino--
Le mystérieux chevalier, "Provençal, le Gaulois"
<!--
3
kakenette Messages postés 218 Date d'inscription dimanche 1 mai 2005 Statut Membre Dernière intervention 15 novembre 2009 1
24 oct. 2006 à 21:10
Désolée, voici la fonction modifiée qui efface toutes les lignes vides même si il y a des espaces.


Function EffacerLignesBlanches(CheminFichier As String)

Dim A$

Dim T() As String

Dim TxTFichier As String


    ' Ouverture du fichier pour y extraire le texte

    Open CheminFichier For Input As #1

        Do Until EOF(1)

        Input #1, A$

        TxTFichier = TxTFichier & A$ & vbCrLf

        Loop

    Close #1

  

    ' Supprime les espaces contenue dans "TxTFichier"

    T() = Split(TxTFichier, vbCrLf)

    For i = LBound(T) To UBound(T)

        If Trim(T(i)) <> "" Then

        A$ = A$ & T(i) & vbCrLf

        'MsgBox Asc(T(i))

        End If

    Next

  

    ' Enregistre les nouvelle modifications

    Open CheminFichier For Output As #1

    Print #1, A$

    Close #1

  

    'Envoie un petit message de confirmation

    MsgBox "Fichier traité avec succès!", vbInformation

  

End Function


Ps: car ton Private Sub va deja encombrer les Sub des composants sur la
form et serra accéssible que sur la forme ou il y a ton Sub. Et puis
pour "casy" Vas sur l'amis google afin de chercher la difference entre
appelé un Sub ou une fonction ;)


A+

kakenette
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
24 oct. 2006 à 21:15
explique moi, stp, je suis pret à apprendre.

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3
kakenette Messages postés 218 Date d'inscription dimanche 1 mai 2005 Statut Membre Dernière intervention 15 novembre 2009 1
24 oct. 2006 à 21:21
lol on va pas se chipoter pour si peut lol. L'un ou l'autre fin bref voila je pense que nous avons répondu à sont problème.

kakenette
3
cs_casy Messages postés 7741 Date d'inscription mercredi 1 septembre 2004 Statut Membre Dernière intervention 24 septembre 2014 40
24 oct. 2006 à 21:26
c'est clair que ça sert à rien de chippoter.

Mais j'ai un peu cherché sur le net, je ne trouve aucune diff. entre les deux (sauf le retour de valeur pour la fonction).
De plus, quant on sais qu'au niveau compilation c'est la même chose, tout est fonction.......

---- Sevyc64  (alias Casy) ----<hr size="2" width="100%" /># LE PARTAGE EST NOTRE FORCE #
3
dodo1309 Messages postés 218 Date d'inscription mercredi 17 mai 2006 Statut Membre Dernière intervention 30 mai 2011
24 oct. 2006 à 22:09
merci a tous pour vos  réponse j'ai esssayé les 2 dernières méthodes marchent toutes
3
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
25 oct. 2006 à 02:11
salut,
le but essentiel de "réponse acceptée" est de permettre aux membres de trouver rapidement une réponse validée...

c'est très vert par ici, trop non?
++
<hr size="2" width="100%" />Prenez un instant pour répondre à ce sondage svp
0
Rejoignez-nous