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

Windows Forms Discussion :

Réécrire l'entête d'un fichier csv sur un nouveau fichier


Sujet :

Windows Forms

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 307
    Points : 87
    Points
    87
    Par défaut Réécrire l'entête d'un fichier csv sur un nouveau fichier
    Bonjour, je voudrais récupérer la 1ère ligne de mon premier fichier csv pour la réécrire sur mon nouveau fichier csv (en + des données de la période choisie mais ça c'est géré)
    merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Dans un fichier texte, tu ne peux pas remplacer juste une ligne, il faut réécrire tout le fichier. Le plus simple, si le fichier est assez petit, c'est de tout lire avec File.ReadAllLines, modifier la première ligne, et tout réécrire avec File.WriteAllLines. Si le fichier est plus gros, il faut boucler en faisant des ReadLine/WriteLine

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 307
    Points : 87
    Points
    87
    Par défaut
    Merci le fichier est plutôt gros, est ce que tu peux me donner un petit exemple avec readline/writeline ?

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    en fait tu ne peux pas écrire dans un fichier que tu es en train de lire, il faut donc passer par un fichier temporaire :

    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
    Dim fileName As String = "leFichier.txt"
    Dim tmpFileName As String = fileName & ".tmp"
    Dim n As Integer = 0
    Using reader As New StreamReader(fileName)
        Using writer As New StreamWriter(tmpFileName)
            Dim line As String = reader.ReadLine()
            If n = 0 Then ' C'est la première ligne, donc l'entête
                 ' Modification de l'en-tête, à toi de voir ce que tu mets dedans...
                 line = Traitement(line)
            End If
            n = n + 1
            writer.WriteLine(line)
        End Using
    End Using
     
    ' Renommage du fichier
    File.Move(tmpFileName, fileName)

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 307
    Points : 87
    Points
    87
    Par défaut
    Ok merci pour le code je pense que je vais m'en sortir maintenant, je te tiens au courant

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 307
    Points : 87
    Points
    87
    Par défaut
    Ca ne fonctionne pas il veut pas StreamReader tout seul alors je rajoute IO. devant mais ça ne marche toujours pas sinon ça bloque au niveau de la modification du fichier aussi

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par ced56 Voir le message
    Ca ne fonctionne pas il veut pas StreamReader tout seul
    Ajoute "Imports System.IO" au début du fichier

    Citation Envoyé par ced56 Voir le message
    alors je rajoute IO. devant mais ça ne marche toujours pas
    C'est à dire ? Qu'est-ce qui ne marche pas ? ça compile pas ? ça fait une erreur à l'exécution ?

    Citation Envoyé par ced56 Voir le message
    sinon ça bloque au niveau de la modification du fichier aussi
    Ca veut dire quoi "ça bloque" ?

    Sois précis si tu veux qu'on puisse t'aider...

  8. #8
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 307
    Points : 87
    Points
    87
    Par défaut
    Je crois que c'est le fait que j'avais pas mis "Imports System.IO" qui fesait tout beugé !
    Mais ce n'est toujours pas bon, j'ai impossible de créer un fichier déjà existant à ce niveau là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File.Move(tmpFileName, filename)

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par ced56 Voir le message
    Mais ce n'est toujours pas bon, j'ai impossible de créer un fichier déjà existant à ce niveau là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    File.Move(tmpFileName, filename)
    ah oui, il faut supprimer l'ancien fichier avant (ou le sauvegarder ailleurs) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    File.Delete(filename)
    File.Move(tmpFileName, filename)

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 307
    Points : 87
    Points
    87
    Par défaut
    Merci toujours un problème cependant : Le processus ne peut pas accéder au fichier 'C:\Documents and Settings\Stagiaire\Bureau\prises.csv', car il est en cours d'utilisation par un autre processus.
    Je te montre mon code au cas où :
    -Déclaration des données :
    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
            Dim filename As String = "C:\Documents and Settings\Stagiaire\Bureau\prises.csv"
            Dim fields As String()
            Dim delimiter As String = ";" 'caractère de séparation
            Dim ligne As String = ""
            Dim tmpFileName As String = filename & ".tmp"
            Dim n As Integer = 0
            Dim JeGArde As New System.Text.StringBuilder
            Dim Newfilename As String = "c:\prises.csv"
            Dim Lect As New IO.StreamReader(filename)
            Dim Debut = CDate(D_Deb.Value.ToShortDateString)
            Dim Fin = CDate(D_Fin.Value.ToShortDateString)
            Dim cpt As Integer
            ligne = Lect.ReadLine
            Fin = Fin.AddDays(1)
            cpt = 0
    - Code pour écrire l'entête et le nouveau fichier csv :
    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
            If cpt > 0 Then
                Using reader As New StreamReader(filename)
                    Using writer As New StreamWriter(tmpFileName)
                        Dim line As String = reader.ReadLine()
                        If n = 0 Then ' C'est la première ligne, donc l'entête
                            ' Modification de l'en-tête, à toi de voir ce que tu mets dedans...
                            writer.WriteLine(line)
                        End If
                        n = n + 1
                        writer.WriteLine(line)
                    End Using
                End Using
     
                ' Renommage du fichier
                File.Delete(filename)
                File.Move(tmpFileName, filename)
                My.Computer.FileSystem.WriteAllText(Newfilename, JeGArde.ToString, False)
                MsgBox("Votre nouveau fichier a été créé !", MsgBoxStyle.OkOnly, "Fichier disponible")
                Process.Start("c:\prises.csv") 'ouverture du fichier après sa création
                Me.Close()

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Attention, dans ton code tu écris 2 fois la ligne d'en-tête... (une fois dans le if, et encore une fois après)

    Citation Envoyé par ced56 Voir le message
    Merci toujours un problème cependant : Le processus ne peut pas accéder au fichier 'C:\Documents and Settings\Stagiaire\Bureau\prises.csv', car il est en cours d'utilisation par un autre processus.
    Sur quelle ligne tu as cette erreur ?

  12. #12
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 307
    Points : 87
    Points
    87
    Par défaut
    Sur celle ci :

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par ced56 Voir le message
    Sur celle ci :
    Bizarre... pourtant l'instruction Using garantit que le fichier sera bien refermé
    Il n'y aurait pas un autre endroit dans ton code où tu accèdes à ce fichier ? Ou alors il est pas ouvert dans Excel ?

  14. #14
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 307
    Points : 87
    Points
    87
    Par défaut
    Le fichier est bien fermé par contre il est vrai qu'il y a un accès à filename plus haut pour garder seulement les données de la période choisie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
                ligne = Lect.ReadLine
                While ligne IsNot Nothing 'tant que je ne suis à la fin on continue
                    fields = ligne.Split(delimiter)
                    If fields.GetValue(1) = "PRI" And fields.GetValue(0) >= Debut And fields.GetValue(0) <= Fin Then 'si les colonnes n°1 et 2 (index de début = 0) correspondent à ma condition je la stocke" Then
                        JeGArde.AppendLine(ligne)
                        cpt = cpt + 1
                    End If
                    ligne = Lect.ReadLine 'on passe à la ligne suivante
                End While
            End If

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Lect est un StreamReader je suppose ? il faut que tu le refermes après usage, sinon le fichier reste bloqué. Le plus simple est d'utiliser un bloc Using comme j'ai fait

  16. #16
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 307
    Points : 87
    Points
    87
    Par défaut
    C'est bien un StreamReader pour le fermer, il me suffit d'écrire ?
    Sinon je testerais avec le using

    Edit : J'ai testé les 2 maintenant dans mon 1er fichier il ne garde plus que l'entête et dans le nouveau j'ai les données.

  17. #17
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par ced56 Voir le message
    C'est bien un StreamReader pour le fermer, il me suffit d'écrire ?
    C'est ça

    Citation Envoyé par ced56 Voir le message
    Edit : J'ai testé les 2 maintenant dans mon 1er fichier il ne garde plus que l'entête et dans le nouveau j'ai les données.

    fais voir la dernière version du code

  18. #18
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 307
    Points : 87
    Points
    87
    Par défaut
    J'ai réussi à résoudre le problème en effectuant quelques modifications.
    Merci pour ton aide

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

Discussions similaires

  1. [PHP 5.0] [CSV] Ecrire dans un fichier CSV sur un serveur
    Par math_thefire dans le forum Langage
    Réponses: 13
    Dernier message: 17/04/2009, 16h44
  2. [CSV] Créer un fichier CSV sur le serveur
    Par sam01 dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2007, 15h10
  3. Blocage sur import de fichier CSV
    Par Pokerstar dans le forum Outils
    Réponses: 2
    Dernier message: 29/03/2007, 17h15
  4. Sortir un fichier csv sur base d une requete
    Par Freeman_80 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 12/01/2005, 11h21
  5. Réponses: 2
    Dernier message: 14/05/2004, 12h55

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