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 une ligne a partir d'un fichier texte


Sujet :

C#

  1. #1
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut Supprimer une ligne a partir d'un fichier texte
    Dans un programme manipulant un fichier texte contenant plusieurs lignes, je lis chaque ligne je fais un contrôle, si c'est OK j'insérerais dans une table sinon je le signale à l'utilisateur, ce que je cherche maintenant à faire c'est une fois une ligne est insérée je la supprime du fichier, comme ça j'aurais a la fin un fichier texte qui ne contient que les lignes ou il y a un problèmes, comment puis je faire ?


    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
    34
    35
    36
    37
    38
    39
    Console.WriteLine("Début insertion : ");
     
                List<string[]> result = new List<string[]>();
                string[] lines = File.ReadAllLines("D:/SD.txt", Encoding.Default);
                List<string> valeurs = new List<string>();
     
                foreach (string line in lines)
                    result.Add(line.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries));
     
                oLiasses.LoadLiasses();
     
                try
                {
                    for (int i = 0; i < result.Count; i++)
                    {
                        Console.WriteLine(" ");
     
                        if (oLiasses.isExist(Convert.ToInt32(result[i][1]), Convert.ToInt32(result[i][2])) == 0)
                        {
                            oLiasses.AddBObjectAndBDataCVTLiasse(result[i][0], int.Parse(result[i][1]), int.Parse(result[i][2]), DateTime.Parse(result[i][3]));
                            //Supprimer la ligne insérée
                            Console.Write("Insertion : " + result[i][1] + " " + result[i][2]);
                        }
                        else
                        {
                            Console.Write("Inclusion ou intersection ! : " + result[i][1] + " " + result[i][2]);
     
                        }
                    }
                }
                catch (Exception ex)
                {
                    Console.WriteLine("Erreur : " + ex.Message);
                }
                Console.WriteLine("");
                Console.WriteLine("");
                Console.WriteLine("FIN");
     
                Console.ReadLine();

  2. #2
    Membre confirmé
    Profil pro
    Développeur freelance
    Inscrit en
    Août 2006
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur freelance

    Informations forums :
    Inscription : Août 2006
    Messages : 453
    Points : 586
    Points
    586
    Par défaut
    Salut,

    Regarde en utilisant les "StreamWritter" & "StreamReader".
    Sinon tu peux stocker en mémoire et lorsque la lecture est terminée, tu effaces le fichier puis tu le recrées avec ce que tu as en mémoire.

    Mosco.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Bonjour,

    Si tu supprimes des lignes de ton fichier d'origine et qu'il garde à la fin le même nom, tu peux avoir du mal à savoir si le fichier en question est ton fichier d'origine où s'il a déjà été traité par ton application et qu'il y a eu bcp d'erreurs (et donc il "ressemble" au fichier d'origine).
    Si le but est de logguer les lignes qui posent pb, pourquoi ne pas recopier celles-ci dans un autre fichier de sortie ?

  4. #4
    Max
    Max est déconnecté
    Expert éminent sénior

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Points : 14 933
    Points
    14 933
    Par défaut
    Salut.

    Petite précision : tu ne peux pas modifier dynamiquement un fichier (supprimer juste une ligne par exemple).

    Ce que t'ont proposé MoscoBlade et miniloutre, c'est donc obligatoire : écriture de tes lignes KO dans un autre fichier ou écrasement de ton fichier original.

    Bon courage

  5. #5
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Si c'est juste pour logguer, tu peux rajouter une section dans ton app.config pour gérer les traces :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <system.diagnostics>
        <trace autoflush="true" indentsize="4">
          <listeners>
            <add name="myListener" 
                 type="System.Diagnostics.TextWriterTraceListener, system, version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" 
              initializeData="c:\logs\monlog.log" />
         </listeners>
        </trace>
      </system.diagnostics>
    puis utiliser des Debug.WriteLine("ligne qui va pas") pour logguer les erreurs directement dans le fichier monlog.log, sans avoir a l'ouvrir, le fermer, etc....

  6. #6
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    J'ai pas trés bien compris la proposition de miniloutre, sinon si je veux recopier les lignes qui posent problemes dans un autre fichier comment puis je faire ?

  7. #7
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    J'ai pas trés bien compris la proposition de miniloutre, sinon si je veux recopier les lignes qui posent problemes dans un autre fichier avec la signature KO comment puis je faire ?

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    Oui, tu peux creer un FileStream (File.Create("chemin du nouveau fichier a creer")

    Puis tu cree un StreamWriter en lui filant le FileStream
    Puis tu fais les Write sur cet objet StreamWriter (et à chacune de tes lignes, tu peux prefixer par "KO")
    Enfin tu Close le StreamWriter puis le FileStream

    Si c'est pas clair, tu me le dis et je recupere un exemple

  9. #9
    Membre habitué
    Inscrit en
    Août 2008
    Messages
    1 596
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 1 596
    Points : 175
    Points
    175
    Par défaut
    j'ai fait une petite recherche sur google et j'ai trouvé l'exemple suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    using (FileStream fs = File.Create(path))
                            {
                                AddText(fs, "\r\n" + result[i][0] + " - " + int.Parse(result[i][1]) + " - " + int.Parse(result[i][2]) + " - " + DateTime.Parse(result[i][3]));
     
                            }
    avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            private static void AddText(FileStream fs, string value)
            {
                byte[] info = new UTF8Encoding(true).GetBytes(value);
                fs.Write(info, 0, info.Length);
            }
    Mais a la fin du traitement je trouve que la derniere ligne traité, cad a chaque fois il copie la ligne et il supprime la précedente, au lieu de l'ajouter ???

  10. #10
    Membre confirmé
    Profil pro
    Développeur freelance
    Inscrit en
    Août 2006
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur freelance

    Informations forums :
    Inscription : Août 2006
    Messages : 453
    Points : 586
    Points
    586
    Par défaut
    tu as plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // Création du path du nouveau fichier
    // fichier étant le path du fichier tester
    string fichierDessinRejet = Path.Combine(Path.GetDirectoryName(fichier),Path.GetFileNameWithoutExtension(fichier) + "_RejetDessinIdentique.txt");
    // Création d'un stream d'écriture
    System.IO.StreamWriter swDessin = new System.IO.StreamWriter(fichierDessinRejet, true, Encoding.Default);
    // Ecriture d'une ligne
    swDessin.WriteLine(ligne);
    // Fermeture du stream
    swDessin.Close();

  11. #11
    Nouveau membre du Club
    Inscrit en
    Juillet 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 35
    Points : 29
    Points
    29
    Par défaut
    tu peux essayer avec ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    FileStream fileStream = File.Create("cheminNouveauFichier");
    StreamWriter streamWriter = new StreamWriter(fileStream);
    streamWriter.Flush();
    StringBuilder sb = new StringBuilder();
    foreach (string ligneARecopier in listeLigneARecopier)
    {
    	sb.AppendLine("KO " + ligneARecopier);
    }
    streamWriter.Write(sb.ToString());
    streamWriter.Close();
    fileStream.Close();

Discussions similaires

  1. Réponses: 11
    Dernier message: 29/05/2012, 11h46
  2. [Débutant] supprimer une ligne de caractere dans un fichier numerique .txt
    Par Medoou dans le forum MATLAB
    Réponses: 1
    Dernier message: 23/08/2010, 11h04
  3. Réponses: 5
    Dernier message: 29/06/2009, 11h57
  4. remplir tableau dans une page JSP à partir d'un fichier texte
    Par ramzouni dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 04/05/2009, 20h44
  5. Réponses: 2
    Dernier message: 21/10/2008, 10h46

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