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

C# Discussion :

Supprimer la première ligne d'un fichier .txt [Débutant]


Sujet :

C#

  1. #1
    Membre habitué
    Femme Profil pro
    Consultante BI
    Inscrit en
    Mars 2011
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Consultante BI
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 236
    Points : 191
    Points
    191
    Par défaut Supprimer la première ligne d'un fichier .txt
    Bonjour ,

    Je veux écrire un code,qui me permet de supprimer la première ligne d'un fichier .txt

    Merci pour votre aide

  2. #2
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Points : 713
    Points
    713
    Par défaut
    Une solution:
    -Charger le fichier Texte dans une liste de string, excepter la première ligne
    -Réécrire le fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            foreach (string line in listeLine)
            {
                writer.WriteLine(line);
            }

  3. #3
    Membre habitué
    Femme Profil pro
    Consultante BI
    Inscrit en
    Mars 2011
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Consultante BI
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 236
    Points : 191
    Points
    191
    Par défaut
    Merci pour votre réponse
    Mais c'est pas très claire
    je veux faire la suppression dans le même fichier, pour que je réécris le fichier?

  4. #4
    Membre éclairé
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Points : 713
    Points
    713
    Par défaut
    Citation Envoyé par Rymaya Voir le message
    je veux faire la suppression dans le même fichier, pour que je réécris le fichier?
    Malheureusement ce n'est pas si simple, pour écrire une ligne à la suite : Rien de plus simple!
    Mais pour supprimer une ligne présent dans le .txt il faut que tu recrées le fichier .txt (ce qui implique suppression de l'ancien et création du nouveau .txt).
    Sauf erreur de ma part...

  5. #5
    Membre éprouvé Avatar de sisqo60
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Février 2006
    Messages
    754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 754
    Points : 1 188
    Points
    1 188
    Par défaut
    Bonjour,

    La solution que t'as proposée FrameBreak est très bien, mais ne t'attends pas à avoir le code tout fait, même si entre nous il n'est pas difficile...

    L'algorithme c'est charger le contenu du fichier (Les lignes du fichier), supprimer la première ligne et réécrire le fichier au même emplacement en supprimant au préalable le précédent.

    Maintenant, si tu ne comprends pas ou que tu n'y arrives pas, envoie nous ton code et nous seront ravi de pouvoir t'aider à comprendre.

    Cordialement

  6. #6
    Membre actif
    Avatar de Micmaya
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 131
    Points : 202
    Points
    202
    Billets dans le blog
    3
    Par défaut
    Voici une solution qui supprime la première ligne (rien que la première ligne):

    J'affiche le fichier dans un champ textbox, grâce à la boucle "while" et je stocke la première ligne dans une variable "vide" qui stocke la première mais ne l'affiche pas et dans l'autre bouton, je sauvegarde le fichier, libre à toi de modifier le code pour l'adapter à tes besoins.

    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
    26
    27
    28
    29
    30
    31
    32
    33
     
    string url;
     
    	private void button1_Click(object sender, EventArgs e)
    	{
    		OpenFileDialog open = new OpenFileDialog();
    		if (open.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    		{
    			url = open.FileName;
    			label1.Text = url;
    			textBox1.Clear();
     
    			string line;
    			System.IO.StreamReader file = new System.IO.StreamReader(url);
    			string vide = file.ReadLine();
    			while ((line = file.ReadLine()) != null)
    			{
    				textBox1.Text += line + "\r\n";
    			}
    			file.Close();
    		}
    	}
     
    	private void button2_Click(object sender, EventArgs e)
    	{
    		SaveFileDialog save = new SaveFileDialog();
    		if (save.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    		{
    			System.IO.StreamWriter file = new System.IO.StreamWriter(save.FileName);
    			file.WriteLine(textBox1.Text);
    			file.Close();
    		}
    	}

  7. #7
    Membre habitué
    Femme Profil pro
    Consultante BI
    Inscrit en
    Mars 2011
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Consultante BI
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 236
    Points : 191
    Points
    191
    Par défaut
    J'ai trouvé une solution.
    Merci infiniment pour vos aides
    Ma solution est la suivante :

    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
    String line = null;
                int line_number = 0;
                int lines_to_delete = 1; 
                string FileName = Dts.Connections["TEST_SANS_ENTETE"].ConnectionString;
                string tempFileName = FileName + ".temp";
                using (StreamReader reader = new StreamReader(FileName))
                {
                    using (StreamWriter writer = new StreamWriter(tempFileName))
                    {
                        while ((line = reader.ReadLine()) != null)
                        { line_number++; if (line_number <= lines_to_delete) continue; writer.WriteLine(line); }
                    }
                }
                if (File.Exists(tempFileName))
                { File.Delete(FileName); File.Move(tempFileName, FileName); } 
     
                // TODO: Add your code here
                Dts.TaskResult = (int)ScriptResults.Success;

  8. #8
    Membre actif
    Avatar de Micmaya
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 131
    Points : 202
    Points
    202
    Billets dans le blog
    3
    Par défaut
    Un peu compliqué, je trouve et donc je propose ma solution si quelqu'un en aurait besoin:

    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
    string url = @"C:\test.txt";
    string fichier = null;
    string line;
    int number = 0;
    System.IO.StreamReader file = new System.IO.StreamReader(url);
    while ((line = file.ReadLine()) != null)
    {
    	number++;
    	if (number <= 1) continue;
    		fichier += line + "\r\n";
    }
    file.Close();
     
    System.IO.StreamWriter file2 = new System.IO.StreamWriter(url);
    file2.WriteLine(fichier);
    file2.Close();

  9. #9
    Membre habitué
    Femme Profil pro
    Consultante BI
    Inscrit en
    Mars 2011
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Consultante BI
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 236
    Points : 191
    Points
    191
    Par défaut
    Merci infiniment Micmaya
    Effectivement ta solution est plus simple .

  10. #10
    Membre actif
    Homme Profil pro
    Chef de Projet
    Inscrit en
    Décembre 2012
    Messages
    113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Chef de Projet
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Décembre 2012
    Messages : 113
    Points : 260
    Points
    260
    Par défaut
    Citation Envoyé par Rymaya Voir le message
    J'ai trouvé une solution.
    Merci infiniment pour vos aides
    Ma solution est la suivante :

    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
    String line = null;
                int line_number = 0;
                int lines_to_delete = 1; 
                string FileName = Dts.Connections["TEST_SANS_ENTETE"].ConnectionString;
                string tempFileName = FileName + ".temp";
                using (StreamReader reader = new StreamReader(FileName))
                {
                    using (StreamWriter writer = new StreamWriter(tempFileName))
                    {
                        while ((line = reader.ReadLine()) != null)
                        { line_number++; if (line_number <= lines_to_delete) continue; writer.WriteLine(line); }
                    }
                }
                if (File.Exists(tempFileName))
                { File.Delete(FileName); File.Move(tempFileName, FileName); } 
     
                // TODO: Add your code here
                Dts.TaskResult = (int)ScriptResults.Success;
    C'est une bonne solution. Il y a une légère amélioration possible pour avoir un fichier temporaire : le plus simple est d'utiliser Path.GetTemporaryFilename()

    Par contre, la solution de Micmaya est mauvaise pour deux raisons :
    - elle oblige le chargement du fichier complet en mémoire. Pour des petits fichiers, pas de soucis, mais pour des gros, cela pourrait poser des problèmes
    - elle concatène énormément de string, ce qui n'est pas hyper performant (chaque concaténation nécessite de nouvelles allocations mémoires et des copies des chaines de caractères). La consommation mémoire sera donc d'autant plus importante, et les copies ralentiront grandement le processus dans le cas de fichier volumineux. Mais ce point peut être amélioré en utilisant un StringBuilder en lieu et place d'une String.

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

Discussions similaires

  1. Réecrire la première ligne d'un fichier txt
    Par ben_maury dans le forum Langage
    Réponses: 2
    Dernier message: 28/05/2009, 09h37
  2. Réponses: 1
    Dernier message: 10/04/2009, 10h13
  3. [CSV] supprimer la première ligne d'un fichier
    Par kanabzh29 dans le forum Langage
    Réponses: 10
    Dernier message: 07/08/2008, 14h28
  4. [VB.NET]Supprimer première ligne d'un fichier TXT
    Par Golzinne dans le forum Windows Forms
    Réponses: 4
    Dernier message: 28/11/2006, 16h03
  5. Supprimer la première ligne d'un fichier texte
    Par n@n¤u dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 13/07/2006, 08h38

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