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 :

Cherche façon d'extraire contenu console dans string


Sujet :

C#

  1. #1
    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 Cherche façon d'extraire contenu console dans string
    Bonjour,

    Je bloque sur l'extraction du texte contenu dans la console...
    J'ai regarder du côté SetOut() hors celui-ci ne me permet pas d'afficher en direct sur la console et seulement sur le .txt.
    J'ai essayé du coté TextWriterTraceListener, le résultat est le même
    Je suis donc revenu sur les anciennes méthodes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                Process killServ = new Process();
                killServ.StartInfo.FileName = "cmd.exe";
                killServ.StartInfo.Arguments = "monappli.exe >> output.txt"; // Commande à exécuter
                killServ.StartInfo.UseShellExecute = false;
                killServ.Start();
                killServ.WaitForExit();
    Qui biensur me génère l'erreur "Le processus est déjà en cours d'utilisation", car la commande est exécuté depuis monappli.exe

    Mon but est de récupérer le tout dans une string (pour un rapport d'erreur trié envoyé par mail).
    Y a t-il une façon simple d'effectuer cette extraction?
    Si vous avez une piste, je suis preneur

    Je vous remercie

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 002
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 002
    Points : 552
    Points
    552
    Par défaut
    J'ai pas compris le besoin...
    C'est pas très claire je trouve

    tu veux logger tout ce qui se passe dans la console, depuis le lancement de l'appli jusqu’à la fin ?

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Juillet 2012
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2012
    Messages : 32
    Points : 37
    Points
    37
    Par défaut
    Bonjour,

    Si jamais tu connais le caractère qui met fin à ton message, essaye un truc tout con :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    string x, txt = "";
    while (true)
    {
      x = Console.Read;
      if (x != "Caractère spécifique")
        txt += x + "\n";
      else
        break;
    }
    MessageBox.Show(txt);
    BinKentsu

  4. #4
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 570
    Points
    3 570
    Par défaut
    Tu peux créer un TextWriter qui écrit sur la console et dans un fichier. Tu rediriges la console dessus avec SetOut au début de ton appli.

  5. #5
    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
    Merci de vos réponse,

    @alavoler : Le but est d'afficher en direct mes opérations sur la console elle même ainsi que récupérer ces lignes de commandes dans une string (ou fichier txt). Hors comme le précise mon premier post, dans mes derniers cas soit l'affichage sur console est possible ou soit le contenu est extrait dans un fichier .txt

    @BinKentsu : Merci de ta réponse, ton astuce pourrait fonctionner si je l’exécuterais à chaque new Line, et je pense que tu voulais plutôt utilisé ReadLine() au lieu de Read() car celui-ci retourne un entier.

    @GuruuMeditation : L'utilisation de textWritter semble une bonne idée, par contre je ne vois pas comment je vais pouvoir réécrire dans la console si je redirige avec SetOut

    Merci!!

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 317
    Points
    13 317
    Par défaut
    Bonjour

    Citation Envoyé par FrameBreak Voir le message
    @alavoler : Le but est d'afficher en direct mes opérations sur la console elle même ainsi que récupérer ces lignes de commandes dans une string (ou fichier txt). Hors comme le précise mon premier post, dans mes derniers cas soit l'affichage sur console est possible ou soit le contenu est extrait dans un fichier .txt
    Si je comprend bien, tu veux faire un "tee" vers console + fichier ?

    Il y a là un projet source qui devrait peut être répondre à ton besoin:

    http://www.codeproject.com/Articles/...Stream-for-NET

    (je ne l'ai pas testé).

    Et un autre ici :

    http://www.cookcomputing.com/blog/ar...ream-in-csharp

  7. #7
    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
    Merci de ton BlueDeep,

    Mais j'ai opté pour TextWriterTraceListener (je m'y prenais mal quand je l'ai cité dans mon premier post ):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                Trace.Listeners.Clear();
                TextWriterTraceListener twtl = new TextWriterTraceListener("test.txt");
                ConsoleTraceListener ctl = new ConsoleTraceListener(false);
                Trace.Listeners.Add(twtl);
                Trace.Listeners.Add(ctl);
                Trace.AutoFlush = true;
                Trace.WriteLine("Afficher dans dossier et console");
    Merci encore pour votre aide

  8. #8
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 570
    Points
    3 570
    Par défaut
    Citation Envoyé par FrameBreak Voir le message

    @GuruuMeditation : L'utilisation de textWritter semble une bonne idée, par contre je ne vois pas comment je vais pouvoir réécrire dans la console si je redirige avec SetOut

    Merci!!
    Avec Console.OpenStandartOutput() tu peux retrouver la console originale. Tu peux donc créer un autre TextWriter, par exemple, et envoyer le texte dessus

  9. #9
    olf
    olf est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 26
    Points : 32
    Points
    32
    Par défaut
    Bonjour à tous,

    J’ai essayé de tester rapidement la solution avec TextWriterTraceListener (pour ma culture personnelle) et quand je rajoute du contenu à la console après l’insertion du code donné, je ne le récupère pas dans le fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
                Trace.Listeners.Clear();
                TextWriterTraceListener twtl = new TextWriterTraceListener("test.txt");
                ConsoleTraceListener ctl = new ConsoleTraceListener(false);
                Trace.Listeners.Add(twtl);
                Trace.Listeners.Add(ctl);
                Trace.AutoFlush = true;
                Trace.WriteLine("Afficher dans dossier et console");
     
                Console.WriteLine("Et maintenant, ça s'affiche où ?");
                //Je ne récupère pas le contenu "Et maintenant, ça s'affiche où ?" dans le fichier "test.txt".

    Je me demande donc : quelle erreur ai-je commise en essayant d’implémenter cette solution ?

    Cordialement,

    Florian.

  10. #10
    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
    Salut Olf!

    Pour récupérer le contenu dans ton fichier texte et même temps que celui-ci soit affiché sur la console il faut utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Trace.WriteLine("Et maintenant, ça s'affiche où ?");
    Console.Writeline() affiche seulement dans la console (ce qui te permet de trier ton rapport en copiant ou non certaines lignes affichées dans ta console vers ton .txt) .

  11. #11
    olf
    olf est déconnecté
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2004
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 26
    Points : 32
    Points
    32
    Par défaut
    Bonjour,

    Merci de cette réponse.

    Si l’on se place dans le cas théorique où le programme dont on veut récupérer les sorties Console est une boite noire, alors cette solution est impossible. Dans mon esprit, la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Console.WriteLine("Et maintenant, ça s'affiche où ?");
    est inatteignable. Au fait, on ne sait pas que cette ligne existe ; On sait simplement que l’on a un programme (par exemple une dll qui expose une méthode publique Run()) qui en s’exécutant génère du contenu dans la Console, que l’on veut récupérer/dupliquer, mais on ne peut pas savoir comment ce contenu est généré.

    Dans ce cas, je suppose donc qu’il faut plutôt s’orienter vers la solution de GuruuMeditation.


    À contrario, si l’on a accès au code qui génère le contenu dans la console, pourquoi ne pas rajouter sous chaque ligne de code qui écrit dans la console une ligne de code qui écrit la même chose dans un fichier (en factorisant éventuellement le tout dans une fonction) ?

    Par ailleurs, la solution avec Trace n’interdit-elle pas d’utiliser cette classe pour autre chose ? Est-il possible d’utiliser Trace pour récupérer/écrire du contenu sans que ce contenu se retrouve dans la sortie Console-Fichier ?

    Cordialement,

    Florian

  12. #12
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Points : 13 317
    Points
    13 317
    Par défaut
    Citation Envoyé par olf Voir le message
    Au fait, on ne sait pas que cette ligne existe ; On sait simplement que l’on a un programme (par exemple une dll qui expose une méthode publique Run()) qui en s’exécutant génère du contenu dans la Console, que l’on veut récupérer/dupliquer, mais on ne peut pas savoir comment ce contenu est généré.
    Dans le cas d'une DLL, ce n'est pas logique de procéder ainsi, puisque tu infère qu'il y a une console dispo, donc tu met une contrainte sur le client de la DLL.

    La logique serait d'écrire dans un Stream fournit par le client, charge à lui de le "cabler" sur la Console ou sur ce qu'il veut.

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

Discussions similaires

  1. Récupérer contenu console dans une variable
    Par Nayra dans le forum Eclipse Java
    Réponses: 0
    Dernier message: 28/11/2010, 00h47
  2. Afficher contenu console dans textview !
    Par mddpp dans le forum GTK+ avec C & C++
    Réponses: 0
    Dernier message: 13/07/2009, 18h19
  3. Extraire contenu texte dans champs objet fichier
    Par marcl1 dans le forum Développement
    Réponses: 7
    Dernier message: 09/06/2009, 22h10
  4. Réponses: 15
    Dernier message: 04/03/2009, 20h46
  5. Récupérer le contenu de DataGridView dans string[][]
    Par stephane.julien dans le forum C#
    Réponses: 1
    Dernier message: 05/05/2008, 17h15

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