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 :

Problème avec ligne de commandes au démarrage de mon appli


Sujet :

C#

  1. #1
    Membre actif Avatar de stolx_10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 374
    Points : 270
    Points
    270
    Par défaut Problème avec ligne de commandes au démarrage de mon appli
    Bonjour

    Je me retrouve avec un problème concernant le passage en paramètres d'une ligne de commandes.

    La ligne que je souhaite envoyer correspond à "p0:CRSS;p1:CRSS VacPlanVacSup;p2:Administrateur;p3:;p4:12;p5:X;p6:;p7:;p8:;p9:O;"
    que j'envoie dans ma classe "program.cs" principale.

    Le problème est qu'au lieu de me retrouver avec une ligne, j'en ai deux comme ceci :
    "p0:CRSS;p1:CRSS"
    "VacPlanVacSup;p2:Administrateur;p3:;p4:12;p5:X;p6:;p7:;p8:;p9:O;"

    l'espace a disparu entre P1:CRSS et VacPlanVacSup.

    voir un aperçu du résultat dans VS2010 dans pièce jointe


    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
    namespace AZUR_LAG
    {
        public class Program
        {
     
            /// <summary>
            /// Point d'entrée principal de l'application.
            /// </summary>
            [STAThread]
            static void Main(string[] args) //ici je récupère la(les) lignes de la commande
            {
                MMain InitMain = new MMain();
     
                InitMain.InitMain(args); // je traite la commande
     
                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Appli_gene.FLAgents());
            }
     
        }
    }
    Et ici la fonction de traitement :
    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
           public void InitMain(string[] command)
            {
                ErreurMain = false;
     
                try
                {
                    A_GES_COLL c_A_GES_COLL = new A_GES_COLL();
     
                    // exemple  "p0:CRSS;p1:CRSS VacPlanVacSup;p2:Administrateur;p3:;p4:12;p5:X;p6:;p7:;p8:;p9:O;"
                    for (int n = 0; n < command.Length; n++)
                    {
                        command[n] = command[n].ToString() + ";";
     
                        int i;
     
                        //Récupération du nom de module appelant
                        i = command[n].ToString().IndexOf("p0:");
                        if (i != -1)
                        {
                            int j = command[n].ToString().Substring(i + 3).IndexOf(";");
                            if (j != -1)
                            {
                                GB_AppliAppelante = true;
                                GO_Nom_module = command[n].ToString().Substring(i + 3, j);
                            }
                            else
                            {
                                GB_AppliAppelante = false;
                                GO_Nom_module = "";
                            }
                        }
                        //Récupération de la précision de module appelant    (Facultatif)
                        i = command[n].ToString().IndexOf("p1:");
                        if (i != -1)
                        {
                            int j = command[n].ToString().Substring(i + 3).IndexOf(";");
                            if (j != -1)
                            {
                                GO_Precision_module = command[n].ToString().Substring(i + 3, j);
                            }
                            else
                            {
                                GO_Precision_module = "";
                            }
                        }
       etc ...
     
                    }//for (int n = 0; n < command.Length; n++)
    mon problème vient pour le paramètre P1 qui entre deux points virgules, possède un espace. Sauf que l'espace est considéré comme un retour chariot dans le passage des arguments dans le tableau de string et cela scinde du coup ma ligne de commandes.

    Comment je peux faire pour n'avoir qu'une seule et unique ligne avec l'espace à l'intérieur ? (je migre une appli VB6 en C#, et ce truc me pose problèmes)
    Images attachées Images attachées  

  2. #2
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Salut,

    Dans un application Console le séparateur entre les arguments est "l'espace". C'est donc pour cela que ton arguments est "splité"

    Voici mon code pour expliquer le comportement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            static void Main(string[] args)
            {
                foreach (var arg in args)
                {
                    Console.WriteLine(arg);
                }
                Console.ReadLine();
            }

    Exemple 1 :
    Args ->Abc Def Ghj
    Résultat :
    Abc
    Def
    Ghj

    Exemple 2:
    Args -> "Abc Def" Ghj
    Résultat :
    Abc Def
    Ghj


    Pour la gestion des arguments en mode console tu as des outils pour t'aider à gérer les paramètres. Par exemple : Command Line Parser Library

  3. #3
    Membre actif Avatar de stolx_10
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2006
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 374
    Points : 270
    Points
    270
    Par défaut
    Merci pour l'astuce du Line parser.
    J'ai trouvé une solution parfaitement fonctionnelle pour mon cas, trouvé ici : https://code.google.com/p/commandlineargs/

    J'ai intégré le fichier *.cs comme dit dans le point 1.
    Au niveau 2, j'ai jouté juste la ligne là où j'en avais besoin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            public void InitMain(string[] command)
            {
     
                CommandLineArguments commandFinal = CommandLineArguments.Parse(command);
     
                string cmd = commandFinal.ToString();
     
    ... }
    Et ça fonctionne comme je le veux.

    Merci

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

Discussions similaires

  1. ghost: ligne de commande de démarrage
    Par keltharak dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 24/02/2010, 11h26
  2. execution d'une classe java sous windows avec ligne de commande
    Par rinuom dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 24/06/2008, 17h04
  3. [Cobertura] [Débutant] Problème avec le mode Command-Line
    Par jgavard dans le forum Qualimétrie
    Réponses: 0
    Dernier message: 09/03/2008, 23h29
  4. Runtime Access avec ligne de commande
    Par vincent rigoulot dans le forum Runtime
    Réponses: 1
    Dernier message: 28/09/2006, 10h28
  5. [C#] Application avec lignes de commande
    Par Oberown dans le forum Windows Forms
    Réponses: 1
    Dernier message: 13/10/2005, 18h26

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