IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Effacer la dernière ligne d'un fichier


Sujet :

VB.NET

  1. #1
    Membre du Club
    Homme Profil pro
    Apprenti développeur
    Inscrit en
    Février 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti développeur

    Informations forums :
    Inscription : Février 2014
    Messages : 102
    Points : 58
    Points
    58
    Par défaut Effacer la dernière ligne d'un fichier
    Bonjour, j'ai créé un programme Windows Form, avec deux boutons : Ajouter et Terminer

    -Le bouton Ajouter permet d'écrire dans mon fichier CSV ce qu'il y a inscrit dans les textbox via writeLine.

    -Le bouton terminer sert à fermer le programme et à vérifier si la dernière ligne du fichier n'est pas vide.

    Cependant, le code que j'ai mis dans l'évènement terminer me pose problème, j'ai essayé cela, mais je ne sais pas si je m'y prends bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
     
     Private Sub BT_FINISH_Click(sender As Object, e As EventArgs) Handles BT_FINISH.Click
     
            Dim n As Integer = 0
     
     
            Dim linelist As New List(Of String)
            For Each line As String In IO.File.ReadAllLines(cheminCSV)
                If line.Trim <> "" Then linelist.Add(line)
                n = n + 1
            Next
     linelist.RemoveAt(n)
            IO.File.WriteAllLines(cheminCSV, linelist.ToArray)
     
     
     
     
            Me.Hide()
            var = False
     
            Invoke(New dSetDebCaseOn(AddressOf SetDebCaseDebOn))
        End Sub
     
    End Class

    Voila j'ai essayé de feinter avec une variable n, pour supprimer la dernière ligne grâce a lineList.RemoveAt(n) mais j'ai cette erreur :

    L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.

    Si je mets linelist.RemoveAt(n - 1), pas d'erreur, mais ça m'efface la dernière ligne, or moi je veux effacer la ligne après la derniere ligne, c'est à dire la ligne vide...


    Merci de m'aider.

  2. #2
    Membre chevronné Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Points : 1 961
    Points
    1 961
    Par défaut
    Je ne comprend pas pourquoi tu as à gérer ça, vu que tu testes chaque ligne ligne du fichier pour savoir s'il est vide ou non, et si c'est le cas tu ne l'ajoutes pas à ta liste qui servira à remplir ton .csv ... (Donc les lignes vides ne peuvent pas être ajoutées au .csv)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            Dim linelist As New List(Of String)
     
            For Each line As String In IO.File.ReadAllLines(cheminCSV)
                If line.Trim <> String.Empty Then
                    linelist.Add(line)
                End If
            Next
            IO.File.WriteAllLines(cheminCSV, linelist.ToArray)
    Aider les autres, c'est encore la meilleure façon de s'aider soi-même. Martin Gray

    ToDo : Faire une ToDo List

  3. #3
    Membre du Club
    Homme Profil pro
    Apprenti développeur
    Inscrit en
    Février 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti développeur

    Informations forums :
    Inscription : Février 2014
    Messages : 102
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par _Ez3kiel Voir le message
    Je ne comprend pas pourquoi tu as à gérer ça, vu que tu testes chaque ligne ligne du fichier pour savoir s'il est vide ou non, et si c'est le cas tu ne l'ajoutes pas à ta liste qui servira à remplir ton .csv ... (Donc les lignes vides ne peuvent pas être ajoutées au .csv)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            Dim linelist As New List(Of String)
     
            For Each line As String In IO.File.ReadAllLines(cheminCSV)
                If line.Trim <> String.Empty Then
                    linelist.Add(line)
                End If
            Next
            IO.File.WriteAllLines(cheminCSV, linelist.ToArray)


    Bonjour Ez3kiel, et merci de m'aider.

    J'ai essayé ton code, mais j'ai toujours une ligne vide tout en bas.

    Mon fichier CSV :


    Ligne 1 : 55001B5E20²first²0²1
    Ligne 2 : 55001B5E20²second²0²0
    Ligne 3 :


    C'est vraiment étrange, pourtant en relisant le code, ça m'a l'air tout bon... N'est-ce pas dû au "WriteLine" ??? Avec le CRLF en fin de ligne. Est-ce que le CRLF est considéré comme membre à part entière de la ligne ?

    Je sais je me pose des questions bizarres

  4. #4
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonjour Kurt,

    CRLF = Carriage Return Line Feed (retour chariot à la ligne)

    Chaque mot ou acronyme en langage de programmation correspond obligatoirement à un terme que l'on peut traduire en français.


    A+

  5. #5
    Membre du Club
    Homme Profil pro
    Apprenti développeur
    Inscrit en
    Février 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti développeur

    Informations forums :
    Inscription : Février 2014
    Messages : 102
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par wallace1 Voir le message
    Bonjour Kurt,

    CRLF = Carriage Return Line Feed (retour chariot à la ligne)

    Chaque mot ou acronyme en langage de programmation correspond obligatoirement à un terme que l'on peut traduire en français.


    A+
    Ok merci pour l'explication wallace.

    Cependant je ne pige toujours pas le problème, pourquoi la dernière ligne est blank.. Très bizarre.

  6. #6
    Membre chevronné Avatar de _Ez3kiel
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2013
    Messages
    836
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Janvier 2013
    Messages : 836
    Points : 1 961
    Points
    1 961
    Par défaut
    En gros, WriteAllLines rajoute un retour chariot à la fine de chaque ligne écrite, ce qui donne l'impression qu'il rajoute une ligne vide car tu vois le curseur à la ligne suivante. Si tu veux passer outre tu vas devoir gérer toi-même tes retour chariots et tout stocker dans une string ... Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
                Dim toto As New List(Of String) From {"test1", "test2", "test3"}
                Dim textFinal As String = String.Empty
     
                For Each line In toto
                    If toto.IndexOf(line) <> toto.Count - 1 Then
                        textFinal &= line & vbCrLf 'Ce n'est pas la dernière ligne, on rajoute un retour chariot
                    Else
                        textFinal &= line 'Dernière ligne, pas de retour chariot 
                    End If
                Next
     
                System.IO.File.WriteAllText("C:\poub\poub.txt", textFinal)

    EDIT : Après réflexion , on peut encore faire mieux, vu que String.Join() permet de rajouter des séparateurs entre les items, et que par la logique il n'en rajoute pas après le dernier item, on peut aussi faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
                Dim toto As New List(Of String) From {"test1", "test2", "test3"}
     
                System.IO.File.WriteAllText("C:\poub\poub.txt", String.Join(vbCrLf, toto))
    Aider les autres, c'est encore la meilleure façon de s'aider soi-même. Martin Gray

    ToDo : Faire une ToDo List

  7. #7
    Membre du Club
    Homme Profil pro
    Apprenti développeur
    Inscrit en
    Février 2014
    Messages
    102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti développeur

    Informations forums :
    Inscription : Février 2014
    Messages : 102
    Points : 58
    Points
    58
    Par défaut
    Bon sang, ça marche du tonnerre maintenant, je ne me doutais pas que ça venait du WriteAllLines, maintenant je le saurais! Hehe merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/03/2008, 17h26
  2. SPOOL : Effacer dernière ligne vide du fichier.
    Par Ujitsu dans le forum Sql*Plus
    Réponses: 6
    Dernier message: 30/07/2007, 18h15
  3. Effacer la dernière ligne d'un fichier texte
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 31/05/2007, 11h52
  4. effacer la dernier ligne d'un fichier
    Par maz dans le forum C
    Réponses: 2
    Dernier message: 17/11/2006, 11h56
  5. comment effacer la premiere ligne dans un fichier
    Par aliosys dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 29/12/2005, 10h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo