Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C#] Récuperer une string dans un if

    27 juin 2011 à 10:44:32

    Bonjour à tous !

    Voilà j'ai un petit problème, j'aimerais générer automatiquement des fichiers objets des tables presentes dans ma base de donnée SQL server, donc celon les tables il y aura des élements générer ou non, pour cela j'utilise un IF que j'ai placée dans une boucle while.

    StreamWriter sw=new StreamWriter(path, true, Encoding.ASCII);
    while (sqlReader.Read())
                {
                    if( (int)sqlReader[1] == 56 )
                        
                    {
                        string nom = (string)sqlReader[0];
                        string xtype = "int"+"?";
                        string objet = string.Format(" Blabla ",
                        nom, xtype, nomtables );
                    }
    
                    else if ((int)sqlReader[1] == 167)
                    {
                        string nom = (string)sqlReader[0];
                        string xtype = "string";
                        string objet = string.Format(" Babibou ",
                        nom, xtype, nomtables);
                    }
                 }
    string text = "using System;" + Environment.NewLine + "using System.Collections.Generic;" + Environment.NewLine + "using System.Linq;" + Environment.NewLine + "using System.Text;" + Environment.NewLine + Environment.NewLine + "namespace DPGenerator.DataAccess.Objects" + Environment.NewLine + "{" + Environment.NewLine + objet + Environment.NewLine + "}";
                    sw.Write(text);
    sw.Close();
    


    Le problème exacte est que le texte que je veux générer a la condition du IF corresspondant se trouve dans un string et que je ne sais pas comment le recuperer en dehort pour l'écrire. :(

    Merci d'avance pour vos réponce et bonne journée ! :)
    • Partager sur Facebook
    • Partager sur Twitter
      27 juin 2011 à 13:21:54

      Pour être honnête je n'ai pas compris grand chose à ton problème.

      Tu voudrais accéder aux variables locales nom xtype et objet en dehors des blocs If-Else?

      Si oui, déplace les déclarations en dehors des blocs If-Else et laisse les assignations comme elles le sont actuellement :
      StreamWriter sw=new StreamWriter(path, true, Encoding.ASCII);
      while (sqlReader.Read())
                  {
                      string nom = null;
                      string xtype = null;
                      string objet = null;
                      if( (int)sqlReader[1] == 56 )
                          
                      {
                          nom = (string)sqlReader[0];
                          xtype = "int"+"?";
                          objet = string.Format(" Blabla ",
                          nom, xtype, nomtables );
                      }
      
                      else if ((int)sqlReader[1] == 167)
                      {
                          nom = (string)sqlReader[0];
                          xtype = "string";
                          objet = string.Format(" Babibou ",
                          nom, xtype, nomtables);
                      }
                      Console.WriteLine("Valeur de xtype => " + xtype);
                   }
      string text = "using System;" + Environment.NewLine + "using System.Collections.Generic;" + Environment.NewLine + "using System.Linq;" + Environment.NewLine + "using System.Text;" + Environment.NewLine + Environment.NewLine + "namespace DPGenerator.DataAccess.Objects" + Environment.NewLine + "{" + Environment.NewLine + objet + Environment.NewLine + "}";
                      sw.Write(text);
      sw.Close();
      


      Cette façon de faire te force à assigner les variables déclarées quoiqu'il arrive (sinon, le compilateur refusera de compiler !). Ici, les variables locales ne seront pas forcément assignées (d'où le "string nom = null;"), à cause de l'usage de if-elseif. L'idéal dans ce cas là, c'est de toujours penser à faire if-elseif-else pour assigner les variables quoiqu'il arrive (auquel cas, les "string nom = null;" peuvent tous devenir "string nom;".
      • Partager sur Facebook
      • Partager sur Twitter
        27 juin 2011 à 13:57:42

        Oui excuse moi j'ai du mal a m'expliquer.
        J'ai aussi oubliée de precisée que j'etais en winform pas en mode console.

        Enfaite tu as compris mon problème sauf que je veux sortir "objet" et pas "xtype" car il sera dans le string objet que je veux sortir justement.



        Peut-tu m'expliquée un peux plus l'usage du if-elseif-else s'il te plait ?
        • Partager sur Facebook
        • Partager sur Twitter
          27 juin 2011 à 17:59:30

          Citation : Lu-uciole

          Peut-tu m'expliquée un peux plus l'usage du if-elseif-else s'il te plait ?



          Fait une traduction littérale en sachant que "If" = "Si" et "Else" = "Sinon".

          Un if-elseif-else se traduirait par "Si [condition] alors [bloc de code] sinon si [condition] alors [bloc de code] sinon [bloc de code]". Le premier if/elseif disposant d'une condition remplie sera exécuté et si un bloc else est rajouté, ce bloc sera exécuté si aucune des conditions précédente n'a pu être remplie. C'est un peu équivalent à la case "default:" dans la structure conditionnelle "switch-case".

          Citation : Lu-uciole

          Enfaite tu as compris mon problème sauf que je veux sortir "objet" et pas "xtype" car il sera dans le string objet que je veux sortir justement.


          S'il s'agit de sortir "string objet" des blocs if-elseif, le code est donné.

          S'il s'agit de sortir "string objet" du bloc while, il n'y a qu'a procéder exactement comme je l'ai fait pour le sortir du bloc if-elseif : Mettre la déclaration "string objet" en dehors du bloc while, le modifier dans le bloc while et vérifier que la variable locale "objet" soit bien assignée à un moment dans le code; sinon erreur de compilation.

          Edit : Si tu te trouves dans le 2eme cas, n'oublie pas que à chaque itération dans ta boucle while, tu ré-assigne la variable objet. Si tu veux récupérer l'ensemble des valeurs "objet" de toutes les itérations de la boucle while, il te faudra concaténer ta chaine de caractère avec "objet += string.Format(" Babibou ", nom, xtype, nomtables);". Cela implique bien sur que objet ne soit pas null avant le démarrage de la boucle; il te faudra donc assigner objet avec String.Empty ("null" et "chaine de caractère vide" sont deux éléments bien distincts!!) avant d'entrer dans la boucle.

          Pour des questions de performances, si le résultat final de "objet" est conséquent, je te recommande d'utiliser StringBuilder à la place de String. String en .NET est une chaine de caractère fixe => Chaque concaténation va allouer suffisamment de mémoire pour construire la nouvelle chaine avant de copier-coller le contenu des chaines concaténées dans ce nouvel espace. StringBuilder est une chaine de caractères dynamique => Une simple liste extensible dans les limites de la mémoire vive accessible, elle ne dispose pas de cet inconvénient d'allocation mémoire à chaque ajout de caractère dans la chaine. Une fois les manipulation terminées sur ta StringBuilder, tu peux en récupérer un objet String en appelant simplement tonStringBuilder.ToString().
          • Partager sur Facebook
          • Partager sur Twitter
            27 juin 2011 à 18:02:01

            Salut,

            je pense que j'ai compris ce qu'il veux, mais j'ai pas le temps de m'y pencher... et c'est pire que ce que je pensais... ce qu'il cherche, c'est avoir le type int? inscrit dans le string xtype.
            • Partager sur Facebook
            • Partager sur Twitter
              27 juin 2011 à 18:11:08

              De même qu'avant de faire "if(monBooleen)" on faisait "if(monBooleen == true)"...Faut bien commencer par quelque chose :D
              • Partager sur Facebook
              • Partager sur Twitter

              [C#] Récuperer une string dans un if

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown