ListBox -> Datum sortieren -> klappt nicht :...-(
-
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 besserwhile (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 fragenaber 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.