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#]: problème lors de l'ecriture dans un fichier


Sujet :

C#

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 10
    Points : 6
    Points
    6
    Par défaut [C#]: problème lors de l'ecriture dans un fichier
    bonjour à tous,
    je suis débutant en C# et j'ai un petit souci lorsque j'écris dans un fichier, je m'explique:
    je désire lire un fichier texte, faire quelques traitements sur une de ces colonnes et puis ecrire le résultat dans un fichier en reprenant le fichier original plus le traitement effectué sur le colonne.
    le traitement se passe bien (l'affichage sur la console est correcte), par contre mon fichier de sortie ne contient qu'une seule ligne (alors que si je demande l'affichage sur la console, j'en ai des milliers)
    voici ma fonction qui me permet l'ecriture dans un fichier:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    static void writeDom(string p, string dom)
    {            
        StreamWriter wDom = new StreamWriter(p.ToString()+".dom.txt");
     
        wDom.WriteLine(dom);
        //Console.WriteLine(dom);
        Console.WriteLine("Pregoression en cours...");
        Console.ReadLine();
     
        wDom.Close();
    }
    sachant que qu'elle prend deux arguments: p= chemin du fichier d'origine, et dom qui est une variable qui contient les traitements effectués sur le fichier (fichier + la colonne modifiée)
    quelqu'un peut-il m'aider?
    merci d'avance.

  2. #2
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Si la variable dom contient bien tout le contenu de ton fichier essaye avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    static void WriteDom(string originalFileName, string dom)
    {
        File.WriteAllText(originalFileName + ".dom.txt", dom);
    }
    pour voir si ça change quelque chose.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci pour ta réponse rapide,
    Malheureusement, cela ne change rien, j'ai toujours mon fichier avec une seule ligne
    je trouve ca très bizarre que console.writeline(dom) ne renvoi pas la meme chose que wdom.writeline(dom), ou wdom est une instance de streamwriter...

  4. #4
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Peut être qu'il n'y a pas de retours chariot dans ton texte, résultat tu vois une seule ligne dans le fichier, mais elle est très longue. Si tu ouvres le fichier avec un éditeur et que tu forces le retour à la ligne (Word Wrap) ça donne quelque chose ?

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    J'ouvre le fichier avec notepad++ et la ligne n'est pas assez longue (ne prend as tout l'écran). donc j'en suis sur, il n'y a qu'une seule ligne mais qui n'est pas fixe puisqu'elle change a chaque fois que je lance mon programme (ça peut peut-être aider...)

  6. #6
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Salut

    Comment tu appele WriteDom ?

    Montre un peu le contexte d'un appel

    Qu'est censé contenir dom lors d'un appel ?

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    bonjour
    pour répondre à la question de "olibara", la variable dom contient toutes les colonnes à écrire (en gros tous le fichier de sortie). je me repete surement mais cette variable "dom" contient bien le contenu souhaité puisque s'affiche sur console.write(dom) mais ne passe pas en ecriture... pour ce qui est de l'appel de la fonction, regardes ma classe .
    je poste ici toute ma classe dans l'espoir de trouver une solution et/ou d'améliorer mon code
    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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
     
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
     
    namespace getDom
    {
        class Program
        {
     
     
            static void Main(string[] args)
            {
                //le fichier contient 6 colonnes, la 5ième est une url 
    string path = @"C:\TEST\monfichier.txt";
                dom(path);
     
            }
     
     
            static void dom(string p)
            {
                StreamReader rDom = new StreamReader(p.ToString());
     
                int counter = 0;
                string sUrl;
                string sD;
                while ((sUrl = rDom.ReadLine()) != null)
                {
                    if (sUrl == "") continue;
                    string sS = sUrl.Split('\t')[4];
     
                    string sT = sS.Replace("//", "||");
                    int iPos = sT.IndexOf("/");
     
                    if (iPos < 0)
                        sD = sT;
                    else
                        sD = sT.Substring(0, iPos);
     
                    string sDom = sD.Replace("||", "//");
                    string recFile = sUrl +"\t"+ sDom;
     
                    writeDom(p, recFile);
                    //Console.ReadLine();
                    counter++;
     
     
     
                }
                rDom.Close();
            }
     
           static void writeDom(string p, string dom)
            {
                StreamWriter wDom = new StreamWriter(p.ToString() + ".dom.txt");
     
                wDom.WriteLine(dom); //le fichier ne contient qu'une seule ligne
                //Console.WriteLine(dom); affiche toutes les lignes traitées à l'ecran
     
    //affiche la progression en cours et doit s'arreter lors l'ecriture dans le fichier //s'achève (non fonctionnel pour l'instant)
     
                Console.WriteLine("Pregoression en cours...");
                Console.ReadLinne();
     
                }
        }
    }
    merci pour votre aide

  8. #8
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    C'est bien ce que je pensais

    A chaque iteration tu appelle WriteDom qui reouvre ton StreamWriter en ecriture et tu ecrase chaque fois le contenu précédent

    Soit tu n'ouvre une seule fois to Writer en debut et tu ne le ferme qu'a la fin (plus performant)

    Soit tu l'ouvre en mode Append (regarde les surcharge, il y a un booleen a utiliser)
    Mais attention, si tu fais comme ca il faut determiner le contexte ou tu doit remettre ce fichier a zero !

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Merci pour ta réponse rapide olibama,
    quand tu dis tu l'ouvre une fois... tu peux me donner le code à utiliser? j'ai essayé de le sortir de mon while mais la il ne reconnait plus la variable que je passe en parametre à mon appel writeDom(var).
    sinon je ne sais pas encore utiliser les Append, tu as une doc à me suggérer?
    merci

  10. #10
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    je viens de trouver la réponse à mon problème. en fait ce qui s'est passé (comme l'expliquait olibara) c'est qu'à chaque itération je fait appel a streamwriter qui ecrase mon fichier et le recrée.
    il a fallut que je passe en parametre un boulean "true" qui permet de rajouter des lignes au lieu de les ecraser. mon instance devient donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    StreamWriter wDom = new StreamWriter(p.ToString() + ".dom.txt", true);
    j'ai une autre question:
    je souhaite maintenant suivre l'évolution du traitement avec une barre de progression ou tout simplement afficher à l'écran le nombre de lignes traitées qui doit s'incrémenter tout le temps. j'ai essayé en mettant un compteur mais quand je l'affiche ca ne fait pas ce que je veux puisque ca me donne ca:
    1
    2
    3
    4
    5
    .
    .
    alors que moi je veux afficher qu'une seule ligne ie un chiffre qui s'incrémente.
    une idée?

Discussions similaires

  1. Probleme lors de l'ecriture dans un fichier texte
    Par mddu66 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 15/09/2009, 17h24
  2. Comment sauter une ligne lors de l'ecriture dans un fichier
    Par Harald dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 29/05/2009, 18h01
  3. Probleme de "" lors de l ecriture dans un fichier
    Par mcphand dans le forum Windows Forms
    Réponses: 7
    Dernier message: 19/06/2007, 13h56
  4. Problème lors de l'écriture dans un fichier.
    Par captainflex dans le forum Ruby on Rails
    Réponses: 2
    Dernier message: 16/05/2007, 13h42
  5. Réponses: 5
    Dernier message: 26/03/2007, 13h28

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