ListBox -> Datum sortieren -> klappt nicht :...-(



  • leider kann ich (als fortgeschriettener anfänger 🙂 nichts mit
    std::map
    anfangen 😉

    es ist schön das das mein freund ist, doch wie soll ich daraus schlau werden, wie implemetiere ich das denn jetzt mit dem switch in den code?



  • Hast du überhaupt schonmal die Hilfe zum Thema std::map befragt? Dazu brauchst du kein Switch mehr. std::map implementiert ein assoziatives Array. Da kannst du dann als Index Zeichenketten verwenden und erhälst als Wert z.B. ne Zahl.

    Deklariert wird das Teil etwa so:
    std::map<string, char> MonthStringToNumber_map;

    Dann musst dus noch befüllen (z.B: an Index Jan den Wert 1, etc.) und schon kannst du über äh ich glaub es war was wie MonthStringToNumber_map["Jan"] auf die einzelnen Zahlen zugreifen...

    -junix



  • danke, ok 🙂

    es hilft zwar oft die hilfe zu befragen,a ber als anfänger finde ich, hat man auch da so seine verständnis probleme 🙂



  • Dann schau zuerst in die Hilfe und komm mit den Verständnisproblem ins Forum, dann lernst du
    a) mit der Hilfe umzugehen
    b) die Terminologie der Hilfe kennen und verstehen

    -junix



  • Hi, versuch es doch mal so:

    Mal angenommen in Str1 steht Jul.12 12:33

    AnsiString MonNbr[12]={"01","02","03","04","05","06","07","08","09","10","11","12"};
    AnsiString MonName[12]={"Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"};
    int pos,z; 
     z=0;
     do
     {
       pos=Str1.Pos(MonName[z]);
       if (pos==0) z++;
     }
     while (pos==0);
     if (pos>0)
     {
       Str1.Delete(pos,3);
       Str1.Insert(MonNbr[z],pos);
     }
    

    Das ganze in eine Funktion packen und den neuen AnsiString zurueckliefern.

    Gruss Daniel666



  • std::map ist da die reichliche elegantere Lösung...

    -junix



  • Danke Daniel, diese Lösung ist auf jeden fall eleganter als die Lösungen die ich hatte (mit if......usw)

    naja, @junix vielleicht liegt es daran das ich version 1 des builders habe, aber std finde ich leider nicht in der hilfe, auch nicht map oder sonst was, ich kann suchen wie ich will 😞



  • ...kann ja sein, ich wollte ja nur einen zweiten Lösungsvorschlag machen, der zwar nicht so elegant, dafür aber einfacher zu verstehen ist.

    P.S.
    Die Abbruchbedingung der Schleife sollte im übrigen besser

    while (pos==0 && z<12)
    

    lauten.

    Gruss Daniel666



  • @BJ du sollst nicht std sondern map finden...

    -junix



  • das einzige was ich finde sind:

    Map-Dateien

    und damit kann ich doch nichts anfangen oder?



  • Hast du unter Start->Borland C++ Builder->Help einen Eintrag "Standard C++ Library Help" oder so? Da ist das zu finden. Oder tippe mal map in den Editor und drücke F1. Und lies dir vielleicht noch den Hilfe zur Hilfe-Guide durch.

    -junix



  • ich habe unter start->borland...->help gar nix, weil es das nicht gibt... 😞

    aber danke dir, trotzdem, ich verwende jetzt einfach die "unfeinere" version, hauptsache es funzt.

    brauche übrigens dringens hilfe bei diesem problem (worauf leider niemand antowrtet...:-(

    http://www.c-plusplus.net/forum/viewtopic.php?t=47880

    🙂
    thx
    Bj



  • Hast du schon mal überlegt es einfach mit einer einer Define-Anweisung zu machen, dann würdest du fast keinen Code benötigen.

    #define Jan 1
    #define Feb 2
    .
    .
    .
    .
    .
    usw.
    

    FGGF 🙄



  • Sehen wir mal davon ab, dass #define eigentlich eher nichtmehr zu verwenden ist wegen der fehldenden Typerisierung, so würde ich mich trotzdem dafür interessieren, wie du jetzt aus einem String den passenden define-Wert rauskriegst?

    Ich poste ja manchmal auch unausgegorene Ideen, aber unausgegorene Ideen die ich poste, haben mindestens einen Ansatz dafür, wie man das Problem des Fragestellers lösen könnte...

    -junix



  • ... @junix ... sehr richtig 🙂



  • Du schneidest den Substring aus dem String ab, also Jan, Feb usw. und vergleichst diese untereinander. Da vorher Jan usw. als Zahl definiert worden sind sollte es nicht allzu schwer sein diese zu sortieren.

    FGGF



  • The Godfather schrieb:

    Du schneidest den Substring aus dem String ab, also Jan, Feb usw. und vergleichst diese untereinander. Da vorher Jan usw. als Zahl definiert worden sind sollte es nicht allzu schwer sein diese zu sortieren.

    Ich bin nicht der stärkste abstrakte denker... um eine Beispielcodierung wär ich dankbar... - hätte nie gedacht, dass ich das jemals schreibe (o;

    Ich seh immernoch nicht, wie du die Verbindung, #define(d-Konstante) nach String schaffst...

    -junix



  • Ich setz mich heute abend mal daheim hin und probiers mal aus. Ich weiss nicht obs geht. Aber ich werd mal sehn was sich machen lässt. Aber die Idee finde ich schon mal gut von mir. 🤡 🤡

    FGGF



  • @ deine idee ist superklasse!
    ich verstehe die zwar noch nicht aber macht nix.

    was macht #define denn eigentlich.
    den text in der hilfe dazu verstehe ich leider nicht.

    bin mal gespannt ob es bei dir geklappt hat, denn denke mal sowas kann man imemrmal wieder brauchen....

    😃

    Bj



  • Morgen,

    @ junix: Sorry, habs gestern nicht mehr geschafft. Bin erst um 23.00 Uhr daheim gwesen. Werd mich nachher mal dransetzen.

    @ Bj:

    #define alpha 1
    #define bravo 2
    

    Eigentlich dient dies oft zur Erleichterung und Vereinfachung von Quellcode.
    Mit einer Define Anweisung teilst du dem Compiler einfach mit, dass an jeder Stelle im Quellcode an der alpha steht eine 1 gesetzt werden soll. Dem Compiler ist es egal ob er mit einer 1 oder mit alpha arbeitet. Aber dem Programmierer ist es so oft leichter den Überblick zu behalten.
    Oder die andere Möglichkeit ist z.B. wenn du einen konstanten Wert im Quellcode hast, dann schreibst du statt der Zahl den DefineAusdruck hin und bei Änderungen musst du nicht durch den Quellcode gehen und suchen, sondern änderst ihn einfach in der Define-Anweisung.

    Junix korrigier mich falls ich falsch liege. 😋

    Ob das mit den Monaten hinhaut weiss ich nicht, könnte eventuell Ärger geben. Sehe da schon wieder so ne lustige Meldung wie Konvertierung von AnsiString nach Integer nicht möglich..... Mal sehn. Hab heute morgen mal Zeit. Werds mal probieren, obs ne Möglichkeit gibt.


Anmelden zum Antworten