German TableSort

mezzomix

Member
Licensed User
Hallo!

Habe folgendes Problem bei dem Programm was ich gerade schreibe:
Ich speicher in einer Table1 in einer Spalte Geburtstage im Format ""dd.mm.yyyy" ab.

Wenn ich diese mit TableSort sortiere werden die Geburtstage ja nach Zeichenfolge sortiert. Ich möchte aber dass Sie richtig nach Datum sortiert werden. Nun habe ich in diesem Forum gelesen, dass man dass irgendwie mit den ticks machen kann und diese dann in einer extra Spalte abspeichert und dann nach dieser sortiert, finde aber nicht genau raus was das ist und wie man die ticks abruft...

:sign0085:

Gruß mezzomix
 

klaus

Expert
Licensed User
Longtime User
Mit DateParse kann man ein Datum in Ticks umwandeln.
Und mit Date kann man Ticks in einen Datumstring umwandeln.
Am einfachsten ist es in einer unsichtbaren Spalte die Ticks abzuspeichern und diese zu sortieren. Zum Beispiel das Keyword Now gibt die aktuelle Zeil in Ticks an die man dann mit Date(Now) in einen Datumstring umwandeln kann oder mit Time(Now) in einen Zeitstring.

Beste Grüsse.
 

specci48

Well-Known Member
Licensed User
Longtime User
Hallo mezzomix,

willkommen bei Basic4ppc!

Anbei im Anhang ein kleines Beispiel.

Diese Vorgehensweise hatte ich bereits einmal in einem anderen Post hier erläutert.


Gruß
specci48
 

Attachments

  • DatumSortieren.sbp
    1.9 KB · Views: 272

mezzomix

Member
Licensed User
edit-Noch ne Frage dazu:

Ich glaube hierbei liefert ja der Calendar die Ticks.
Wenn ich nun aber eine Textbox habe wo ich das Datum eintippe, wie mache ich dass dann.

Kann ich dass im richtigem Format eingegebene Datum irgendwie in Ticks umwandeln?
Habe es nicht hinbekommen



Super vielen Dank und schönes WE!

gruß mezzomix
 
Last edited:

mezzomix

Member
Licensed User
Hallo!

Ich habe nun folgendes Problem. Ich habe eine table(wird als xml Datei gespeichert) mit folgenden Daten gefüttert:
z.B.

Col:Geburtstage Col:Vorname Col:Nachname
01.12.1975 Max Mustermann
31.12.1967 ........ .................
01.01.1980
04.03.1968

Ich möchte nun, dass durch einen klick auf einen Button der nächste Geburtstag, von dem aktuellem Datum aus gesehen, in einer MsgBox erscheint.Also in diesem Fall der 31.12.

Habe schon etliches ausprobiert...habe die Geburtstagsdaten mit StrSplit auseinandergenommen, damit ich das Geburtsjahr nicht mehr dabei habe und habe dann versucht diese Daten weiter zu verarbeiten, habe dass mit ticks versucht, usw.

weiss nun nicht mehr weiter...
ne Lösung gibts bestimmt...ich komm nur nicht drauf:)

gruß

mezzomix
 
Last edited:
D

Deleted member 103

Guest
Hallo mezzomix,

also mit StrSplit müsste es funktionieren. Du kannst aber, wenn es geht, dein Code hier hochladen und dann kann ich dir(vielleicht) weiter helfen.


Ciao,
Filippo
 
D

Deleted member 103

Guest
Hallo mezzomix,

ich habe dir zwei versionen erstellt (ich hoffe ich habe verstanden was du meinst).
Die erste ("gebfinden.sbp") habe so modifiziert ohne grosse änderungen.

Bei der zweite ("gebfinden_neu.sbp") habe ich ein neue Kalender-Control hinzugefügt.
Die Library http://www.b4x.com/forum/additional-libraries/1238-fgcontrols-library.html ist für das Kalender-Control notwendig.

Ciao,
Filippo
 

Attachments

  • gebfinden.jpg
    gebfinden.jpg
    21.6 KB · Views: 268
  • gebfinden_neu.sbp
    2.7 KB · Views: 262

specci48

Well-Known Member
Licensed User
Longtime User
Hi mezzomix,

irgendwie bin ich mir sicher, das Filippos Lösung nicht Deinem Wunsch entspricht. Sicherlich willst Du bei der Geburtstagsprüfung nur den Tag und den Monat berücksichtigen.
Im Anhang findest Du meinen Vorschlag. Ich hoffe, die (Programm-)Kommentare helfen ein wenig beim Verständnis.

Du solltest Dir übrigens auch noch überlegen, was das Programm machen soll, wenn mehrere Personen zu einem Datum (ohne Jahr natürlich) Geburtstag haben.


Gruß
specci48
 

mezzomix

Member
Licensed User
Hallo specci 48!

Genau so meinte ich es!!
Vielen Dank!

@Filippo: Danke trotzdem!!

-edit
B4X:
ticksOhneJahrAktuell = DateAdd(0, 0, DateM - 1 , DateD - 1)

wieso muss man denn das -1 schreiben(weiter unten im Quelltext auch nochmal)?-

gruß

mezzomix
 
Last edited:

specci48

Well-Known Member
Licensed User
Longtime User
-edit
B4X:
ticksOhneJahrAktuell = DateAdd(0, 0, DateM - 1 , DateD - 1)

wieso muss man denn das -1 schreiben(weiter unten im Quelltext auch nochmal)?-
Gut nachgefragt! :)

In der Version, die ich hochgeladen habe, kann man die -1 tatsächlich an allen vier Stellen weglassen.
Da Date(0) den 01.01.0001 ergibt, hatte ich zwischenzeitlich für Kontollausgaben den Tag und Monat jeweils um 1 verringert, damit beim Debug der korrekte Tag angezeigt wurde.


Gruß
specci48
 

mezzomix

Member
Licensed User
Hallo specci48!

Ich bin noch immer dabei diesen COde zu verstehen. Habe ihn schon debuggt und dabei die Werte angeschaut. Folgendes ist mir noch unklar:

B4X:
' als Startwert der nächste Geburtstag ohne Jahr (maximal 1 Jahr in der Zukunft)
   ticksNaechsterGeburtstagOhneJahr = DateAdd(Now, 1, 0, 0)

Warum steht einmal in der Anmerkung "...nächste Geburtstag ohne Jahr.." ? Das verwirrt mich etwas. Verstehe dass nicht ganz.
Die andere Sache wäre in der nächsten Zeile warum Du da DateAdd(Now ...nimmst, der Wert wird ja in jedem Fall im ersten Durchlauf der Schleife wieder überschrieben, oder?. Warum muss am Anfang dieser Wert drinne stehen?

Frohe Weihnachten allen
gruß

mezzomix
 
Last edited:

klaus

Expert
Licensed User
Longtime User
Hallo mezzomix.

Ich hab mal in specci's Programmvorschlag reingeschaut.

Der Kommentar
B4X:
' als Startwert der nächste Geburtstag ohne Jahr (maximal 1 Jahr in der Zukunft)
kann verwirrend sein, stimmt aber mit dem Variablenamen über ein.
Nur der Erste Wert stimmt nicht über ein, weil ja das Now drin ist.
Der Erste Wert von ticksNaechsterGeburtstagOhneJahr muss aber höher sein als der Erste Wert von ticksOhneJahrNeu damit der Erste Eintrag in der Tabelle richtig behandelt wird. Das ist eben mit ticksNaechsterGeburtstagOhneJahr = DateAdd(Now, 1, 0, 0) gewährleistet.

Beste Grüsse und ein schönes Weihnachtsfest.
 

mezzomix

Member
Licensed User
Danke Klaus!
Verstehe nun den Code. Habe den Code nun schon soweit verändert , dass wenn jemand am aktuellen Tag Geburtstag hat , dass dann eine extra MsgBox erscheint mit "Max Mustermann: Heute"

Jetzt versuche ich gerade das Programm so zu verändern, dass erkannt wird wenn mehrere an einem Tag Geburtstag haben. Das habe ich auch schon zum Teil, da hackt es aber schon wieder. Bekomme es nicht hin innerhalb einer Schleife, ein Array von Schleifendurchgang zu Schleifendurchgang mit Daten zu füttern.

Also ich meine in Durchlauf 1 soll ein Array(0) mit einem bestimmten Wert angelegt werden. In durchlauf 2 soll Array(1) einen Wert zugewiesen bekommen, usw. Dass Array soll unendlich lang sein. Habe das so versucht:

globals
dim xgeb(0) as string

z.B. sub button_click
for i = 0 to irgendwas
xgeb(ArrayLen(xgeb()) = irgendeinwertvoneinervariable
next

Da meckert er immer über die Zeile xgeb. Ich bekomme es nicht hin xgeb(0),xgeb(1),.... nacheinander(von Scheifendurchgang u Schleifendurchgang) einen Wert zuzuweisen.:sign0013::)


gruß und Frohe Weihnachten

mezzomix
 
Last edited:

klaus

Expert
Licensed User
Longtime User
Hallo mezzomix,

So wie Du das machen willst geht es leider nicht.
Dim xgeb(0) As string heisst dass die Anzahl der Werte 0 ist.

Du hast 2 Möglichkeiten:

Dim xgeb(100) As string

und

For i=0 To Anzahl
xgeb(i)=
"A"
Next


Oder mit einem ArrayList Control den Du auch 'xgeb' nennen kannst.
Und dann mit:

xgeb.Clear ' xgeb lehren falls nötig
For i=0 To Anzahl
xgeb.Add(
"A")
Next

die ArrayList füllen.

Ich würde Dir die zweite Lösung bevorzugen. Der ArrayList Control hat Alle Möglichkeiten zum Verwalten. Item, Add, Insert, Remove, RemoveAt usw.

Beste Grüsse.
 

mezzomix

Member
Licensed User
Danke!

Habe nun eine Lösung gefunden , wie ich eine extra MsgBox erscheinen lasse wenn die Person am aktuellen Datum Geburtstag hat und wenn mehrere Personen an einem Tag Geb. haben.

Will euch die Datei mal zeigen. Ist aber wahrscheinlich nicht die optimale Lösung, aber es scheint zu funktionieren:)

View attachment 5072

gruß
mezzomix
 
Top