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 :

[c#2] Ecrire dans un fichier à partir d'une certaine ligne


Sujet :

C#

  1. #1
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 174
    Points : 62
    Points
    62
    Par défaut [c#2] Ecrire dans un fichier à partir d'une certaine ligne
    Bonjour

    Je dois créer une petite appli en c# via Visual Studio 2005. J'ai avec l'aide de tutoriel créer cet algo qui lit toute les lignes de mon fichier et repère la ligne qui contient une certaine chaine de caractère. Je dois faire en sorte d'écrire un texte après cette ligne, sans écraser ce qu'il y a après :


    texte d'origine
    - mot recherché (ligne = x)
    mon nouveau texte (ligne = x+1)
    texte d'origine


    Voilà le code pour l'instant :

    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
     
     string sFileName ="C:\\Documents and Settings\\Administrator\\Desktop\\Outils\\MetaBase.xml";
                // Création d'une instance de StreamReader pour permettre la lecture de notre fichier 
                StreamReader monStreamReader = new StreamReader(sFileName);
                StreamWriter monStreamWriter = new StreamWriter(sFileName); 
                string ligne = monStreamReader.ReadLine();
     
                // Lecture de toutes les lignes et affichage de chacune sur la page 
                while (ligne != null)
                {
                    if(ligne.Contains("Path"))
                    {
                        if(ligne.Contains("Serv)){
                            MessageBox.Show(ligne);
     
                        }
     
     
                    }
     
                    ligne = monStreamReader.ReadLine();
                }
                // Fermeture du StreamReader (attention très important) 
                monStreamReader.Close();

    Une petite aide? Je n'ai pas trouvé comment faire avec l'objet StreamWriter...

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 499
    Points : 218
    Points
    218
    Par défaut
    Salut,

    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
     string sFileName ="C:\\Documents and Settings\\Administrator\\Desktop\\Outils\\MetaBase.xml";
                // Création d'une instance de StreamReader pour permettre la lecture de notre fichier 
                StreamReader monStreamReader = new StreamReader(sFileName);
                StreamWriter monStreamWriter = new StreamWriter(sFileName); 
                string ligne = monStreamReader.ReadLine();
     
                // Lecture de toutes les lignes et affichage de chacune sur la page 
                while (ligne != null)
                {
                    // tu réécris ta ligne dans le fichier de sortie
                    monStreamWriter.Write(ligne);
     
                    if(ligne.Contains("Path"))
                    {
                        if(ligne.Contains("Serv"))
                        {
                            // ici tu peux ajouter ton nouveau texte   
                            // avec monStreamWriter.Write("");
                        }
                    }
                    monStreamWriter.Flush();        // pour vider la mémorie tampon
                    ligne = monStreamReader.ReadLine();
     
                }
                // Fermeture du StreamReader (attention très important) 
                monStreamReader.Close();
                monStreamWriter.Close();
    par contre je suis pas sûre que tu puisses faire ça dans le même fichier,
    il doit falloir que tu utilises un fichier temporaire pour le streamWriter...

    ou bien tu fais une copie pour le streamReader que tu supprimeras quand tu auras fini...

  3. #3
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    VOilà un petit exemple tout bête :
    Code C# : 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
     
    		 StreamReader reader = new StreamReader(@"c:\test.txt");
    		 StreamWriter writer = new StreamWriter(@"c:\test2.txt");
     
    		 string ligneLue = string.Empty;
    		 string ligneEcrite = string.Empty;
     
    		 while ((ligneLue = reader.ReadLine()) != null)
    		 {
    			 if (ligneLue.StartsWith("Ligne 4"))
    			 {
    				 ligneEcrite = string.Concat(ligneLue, writer.NewLine, "InterLigne 1");
    			 }
    			 else
    			 {
    				 ligneEcrite = ligneLue;
    			 }
     
    			 writer.WriteLine(ligneEcrite);
    		 }
     
    		 reader.Close();
    		 reader.Dispose();
    		 writer.Close();
    		 writer.Dispose();

  4. #4
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    Je confirme... J'ai réussi à ouvrir le même fichier avec deux Stream différents, mais le Write s'effectue en mode append et je vois pas comment faire autrement...

    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
     
    string sFileName ="C:\\test.txt";
          FileStream f = File.Open(sFileName,FileMode.Open);
          StreamReader monStreamReader = new StreamReader(f);
          StreamWriter monStreamWriter = new StreamWriter(f);
     
          string ligne = monStreamReader.ReadLine();
     
          while (ligne != null){
              if(ligne.IndexOf("4") != -1){                  
                monStreamWriter.WriteLine(ligne);
                monStreamWriter.WriteLine("5");
                monStreamWriter.Flush();
              } else {
                monStreamWriter.WriteLine(ligne);
                monStreamWriter.Flush();
              }
              ligne = monStreamReader.ReadLine();
          }
          f.Close();

  5. #5
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 174
    Points : 62
    Points
    62
    Par défaut
    Oui, mais je n'arrive pas à faire cela...


    En gros, je lit un fichier fic1, je crée un fic2. A chaque ligne lu de fic1 je l'écris dans fic2 (mon fichier temporaire). Mais je n'arrive pas à créer un StreamWriter sur fic2, il me dit que la ressource est utilisée!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    File.Create(sFileNameDest);
     
     
                StreamWriter monStreamWriter = new StreamWriter(sFileNameDest);
    si je commente le File.Create et que le fichier existe, ça marche. Comment libérer le fichier?

  6. #6
    Membre éprouvé Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Points : 1 256
    Points
    1 256
    Par défaut
    Je penses que ton problème vient du fait que tu n'avais pas fermer ton StreamWriter la première fois, du coup le fichier est "locké" et tu ne peux plus écrire dedans.

  7. #7
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    101
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Mai 2002
    Messages : 101
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par skystef
    Mais je n'arrive pas à créer un StreamWriter sur fic2, il me dit que la ressource est utilisée!

    Ben c'est normal, tu spécifies le même fichier dans ton StreamWriter et dans ton StreamReader... (ta variable sFileName) Spécifie un nom différent et ça va marcher nickel

  8. #8
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    174
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 174
    Points : 62
    Points
    62
    Par défaut
    Citation Envoyé par Cold Hand
    Ben c'est normal, tu spécifies le même fichier dans ton StreamWriter et dans ton StreamReader... (ta variable sFileName) Spécifie un nom différent et ça va marcher nickel

    Oui, mais justement, je veux créer fic2 puis écrire dedans....

Discussions similaires

  1. lire une table dans mysql a partir d'une certaine ligne
    Par persé dans le forum Requêtes
    Réponses: 6
    Dernier message: 22/03/2013, 16h11
  2. Ecrire dans un fichier à partir d'un CL
    Par fspiecart dans le forum AS/400
    Réponses: 5
    Dernier message: 07/07/2008, 15h51
  3. Réponses: 1
    Dernier message: 19/04/2008, 16h26
  4. Réponses: 4
    Dernier message: 01/12/2005, 01h01
  5. ecrire dans un fichier un retour a la ligne
    Par ETI-trian dans le forum C++
    Réponses: 8
    Dernier message: 17/10/2005, 09h51

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