switch



  • Hi.

    Ich habe ein Prob mit dem Switch.
    BCB meint das ich nur char,int,long,enum nutzen kann, aber kein AniString.

    Wie soll ich das jetzt lösen????

    Alles in "else if" zu wäre ja mist...

    TFrom::CheckFlExt(AnsiString FileName)
    {
      switch(FileName)
      {
        case ".cpp":
        case ".h":
          ShowMessage("C++ Code");
          break;
        case ".html":
        case ".htm":
          ShowMessage("HTML Code");
          break;
        case ".ini":
          ShowMessage("INI Code");
          break;
        case ".js":
          ShowMessage("JavaScript Code");
          break;
        default:
          ShowMessage("No Code, Default Code is enabled");
          break;
      }
    }
    


  • Wenn du C++ könntest, wüßtest du das das nicht geht. 😡



  • Toll hätte ich jetzt nicht gewußt...



  • Original erstellt von DJ BlackEagle:
    **Hi.
    Wie soll ich das jetzt lösen????
    **

    nicht unüblich ist die lösung, ne hashtable zu verwenden, um die ganzen strings in entsprechende ids umzusetzen und für die ids dann switch zu nehmen.
    aber ne menge if/else tuts erstmal genausogut.



  • ok, das mit else/if wäre ne Lösung, aber eleganter wäre es doch per switch...

    HAshtable? Wat ist dat? Davopn han ich noch nie gehört.



  • Hallo,

    Du könntest auch eine map verwenden, mit deinem AnsiString als Index.
    Das lohnt sich allerdings nur wenn du diesen switch häufig brauchst.



  • Original erstellt von DJ BlackEagle:
    ok, das mit else/if wäre ne Lösung, aber eleganter wäre es doch per switch...

    das glaube ich nicht, tim.

    HAshtable? Wat ist dat? Davopn han ich noch nie gehört.

    wenn es sagen wie mal 100 extensions wären, würde die if/else-orgie 100 stringvergleiche brauchen. lahm. die hashtable braucht nur ca. 3, um aus dem string ne eindeutige zahl zu machen. schnell. und die zahl kann dann mit switch direkt benutzt werden. in großen projekten (und in kleinen auch) ist der trick mit der hashtable schneller. un man darf wieder switch benutzen, was manch einen erfreut.



  • ...und vielleicht kann man sich durch die Hashtable das switch sogar ganz sparen. 🙂 Bei dem Beispiel oben wäre das sicherlich möglich.



  • Wie geht das mit diesen Tables genau??
    Weil wie gesagt ich kenne zwar hash, aber wie ich die in C++ nutze KA udn wie es da geht.



  • nimm ne map. hashtables hat die stl nicht. da assoziierst du dann den string mit einem funktionszeiger und das switch fällt ganz weg



  • @DJ BlackEagle

    Ganz 'primitiv' gehts so:

    Alle 'Strings' in eine Stringliste.
    Mit IndexOf(".htm") o.ä. holste Dir den Index in der Liste
    Mit dem Wertz kannste in Dein switch gehen!

    PS: Ich machs so in ner Anwendung, die Dateiformate in ner ComboBox auswaehlen laesst, da ist ja intern auch eine 'Liste' drin!



  • Wenn du die Stringliste mit den Werten füllst: Filetyp1, MeldungsString, Filetyp2...
    kannst du gefunden Index + 1 = MeldungsString arbeiten.
    Da hat der DerAltenburger eine gute Idee gehabt und der Code ist extrem kurz und übersichtlich. Auch kannst du die Stringlist aus einer *.ini Datei dynamisch laden und diese dann jederzeit an deine Bedürfnisse anpassen ohne das Programm neu zu schreiben.


Log in to reply