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



  • 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.



  • also, wenn man jetzt zB:

    #define Jan 1
    

    schreiben würde, würde der compiler den "Jan" wert dann auch in Strings als wert 1 nehmen.

    Also zB habe ich dort den String:
    Jan.23 12:33
    würde er, falls es denn dann klappen sollte, aus Jan eine 1 machen?
    oder müsste Jan seperat und ganz alleine in einem string stehen?

    denn wenn es seperat stehen muss, hat diese möglichkeit keinen sinn für mich... 😉 da der rest des datum auch eine große rolle spielt.
    oder ich müsste es ausschneiden, und dann als neue variable monat + den rest wieder anhängen.
    hängt er dann eine 1 an?
    naja, das sind viele fragen 🙂

    aber es interessiert mich sehr ob das geht.

    thx
    Bj



  • Denkfehler: Von den Strings weiss der Präprozessor (der übrigens Define verarbeitet und die Ersetzungen vornimmt) ja nichts. Jan wird also nur durch 1 ersetzt, solange Jan im Quelltext steht. Zur Laufzeit ist das unmöglich vom Präprozessor handlebar.
    #define sollte man in C++-Programmen auch gar nicht mehr verwenden (wegen der fehlenden Typerisierung) sondern "const <typ> <bezeichner>".

    -junix



  • Das liegt das Problem, das ich im Moment noch sehe. Da der Jan in einem String steht. Normalerweise schreibt man den DefineAusdruck wie eine Zahl in einen Aufruf.

    z.B. Flaeche=5*a+b
    
    mit #define Anzahl 5
    
    schreibt man
    
    Flaeche=Anzahl*a*b
    

    Aber mal ne gute Frage: Was passiert wenn ich

    #define Jan 1

    und den String Str="Jan" in einen Integer caste ??

    Rafft der Compiler dies, oder gibts die Fehlermeldung, dass Jan kein gültiger Integerwert ist ??

    FGGF

    Edit1: War ich zu langsam. 😡



  • tja, wenn es zur laufzeit nicht erkannt wird, nützt es doch eigentlich nichts oder?
    denn vergleicht wird doch -immer- nur zur laufzeit?!

    könntest du mal ein beispiel geben für:
    "const <typ> <bezeichner>"

    und was bewirkt das denn dann?

    thx
    Bj



  • The Godfather schrieb:

    Aber mal ne gute Frage: Was passiert wenn ich [...Beschreibung eines wilden gefummeles mit Zeigern, etc...]
    Rafft der Compiler dies, oder gibts die Fehlermeldung, dass Jan kein gültiger Integerwert ist ??

    Das Ergebnis hängt davon ab, wie du den String deklariert hast.
    1. Casten ist böse und sollte vermieden werden
    2. man Castet nicht "einfach mal so" irgendwelche Werte
    3. Man sollte nicht casten, wenn man sich nicht bewusst ist, was dabei genau geschieht.

    Ich empfehle dir mal irgendwo im Netz ein Tutorial zum Thema C, Datentypen, Zeigern und Casten aufzutreiben, dann wirst du merken, was für eine wahnwitzige Idee du da hattest.

    -junix


Anmelden zum Antworten