Startseite › Foren › Deutsches LiveCode-Forum › zeilen in listfield die älter als 1Jahr nicht mitzählen
- Dieses Thema hat 23 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 3 Jahren, 9 Monaten von Axwald.
-
AutorBeiträge
-
-
Januar 2, 2021 um 00:18 Uhr #25549
Hallo LivecodeUser
ich habe ein ScrollingField welches 3 Spalten enthält.
Spalte1 Das Datum des Eintrags
Spalte2 Den Namen des Autors
Spalte3 KommentarSa, 12. Jan 2019 Name ohne_A
Sa, 12. Mrz 2019 Name ohne_A
Fr, 05. Jul 2019 Name ohne_A
Mo, 08. Jul 2019 Name mit_A
Di, 09. Jul 2019 Name mit_A
Mi, 10. Jul 2019 Name mit_A
Do, 11. Jul 2019 Name mit_A
usw.
Fr, 20. Nov 2020 Name mit_ADie Zeilen sind aufsteigend nach Datum sortiert.
In einem Feld lasse ich mir die Anzahl aller Zeilen die nicht leer sind anzeigen.
Das funktioniert soweit einwandfrei.Nun möchte ich gerne im nächsten Schritt nur die Zeilen zählen lassen,
die nicht! älter als 1Jahr sindIch finde aber leider keinen Lösungsansatz.
Wer kann helfen? -
Januar 2, 2021 um 02:43 Uhr #25553
Hi akrages,
Prosit Neujahr! 🙂
... put fld "das mit den drei spalten" into tData ## TAB getrennt, denke ich? ## Sonst itemdel anpassen: set itemdel to TAB put the seconds - (60*60*24*365) into VorEinemJahr put 0 into AnzahlJüngerals1Jahr repeat for each line tLine in tData put item 1 of tLine into tDatum convert tDatum from abbr system date to seconds if tDatum >= VorEinemJahr then add 1 to AnzahlJüngerals1Jahr end if end repeat answer AnzahlJüngerals1Jahr && "Zeilen haben Daten aus dem letzten Jahr." ...
Aus dem Kopf, sollte aber funktionieren. 😎
Und denk dran beim Testen, 2020 war ein Schaltjahr.Gruß
Klaus
-
Januar 2, 2021 um 15:53 Uhr #25557
prosit Neujar!
Das ging ja schnell.
Vielen Dank!
Funktioniert soweit auch ganz gut, bis auf folgendes:
Dein Code sucht jetzt in der Liste alle Zeilen aus dem Jahr 2020Ich möchte aber gerne immer vom aktuellen Datum ausgehend (also von Heute) nur die Zeilen zählen, welche nicht älter als ein Jahr sind.
Wie kann ich deinen Code dahingehend ändern?
-
Januar 2, 2021 um 17:02 Uhr #25558
Genau danach hattest Du aber gefragt! 😎
the seconds -> ist JETZT im Moment der Skriptausführung, also HEUTE
60*60*24*365 -> Die Sekunden in einem Jahr
put the seconds – (60*60*24*365) into VorEinemJahr -> Ein Datum genau ein Jahr weniger als JETZT
Nun vergleiche ich jedes Datum in der Liste (item 1) ob es älter als das Datum vor einem Jahr ist, wenn nicht, wird die Zeile addiert.Oder habe ich hier etwas völlig falsch verstanden?
-
Januar 2, 2021 um 18:08 Uhr #25560
So habe ich deinen Code auch gelesen.
Aber von heute ausgehend dürfte er die Zeile:
Fr, 01. Jan 2020 Name mit_A
nicht mehr mitzählen, sondern nur noch die Zeile:
Fr, 06. Mrz 2020 Name ohne_A
welche umittelbar unter der erstgenannten steht.Und mit jedem weitern Tag in der Zukunft müssten ja, -wenn keine weiteren Einträge erfolgen,
die angezeigte Zeilenzahl kleiner werden.Ich hoffe mich einigermaßen verständlich ausgdrückt zu haben.
-
Januar 2, 2021 um 18:24 Uhr #25561
So habe ich deinen Code auch gelesen.
Aber von heute ausgehend dürfte er die Zeile:
Fr, 01. Jan 2020 Name mit_A
nicht mehr mitzählen, sondern nur noch die Zeile:
Fr, 06. Mrz 2020 Name ohne_A
welche umittelbar unter der erstgenannten steht.Aber der 1. Januar wird gtrotzdem mitgezählt?
Und mit jedem weitern Tag in der Zukunft müssten ja, -wenn keine weiteren Einträge erfolgen, die angezeigte Zeilenzahl kleiner werden. Ich hoffe mich einigermaßen verständlich ausgdrückt zu haben.
Das hatte ich schon richtig verstanden.
Poste doch bitte mal Deine Liste mit den “Daten” (Datums), muss ich hier nachvollziehen. -
Januar 2, 2021 um 18:33 Uhr #25563
Oh, sorry, sehe gerade, daß Dein erstes ITEM kein gültiges -> abbr system date ist!
Die müssten nämlich so aussehen:
Fr, 1. Jan. 2020
Sa, 1. Feb. 2020
Fr, 6. März 2020
…Das bedeutet, wir müssen das erste ITEM zuerst in ein für LC erkennbares Format umwandeln und dann mit dem aktuellen Datum vor einem Jahr vergleichen.
-
Januar 2, 2021 um 18:52 Uhr #25565
Danke.
Ich glaube jetzt zählt er richtig.
26 statt 25 Tage
Morgen müssten es dann 25 Tage sein.Um das zu testen:
Kann ich das aktuelle Datum simulieren?
zB. Durch ein Feld in das ich ein Datum in der Zukunft liegend schreibe
mit dem er dann die Berechnung vornimmt.Wie müsste ich deinen Code dann anpassen?
-
Januar 2, 2021 um 19:11 Uhr #25566
Ersetze -> the seconds in meinem Skript mit einem anderen Datum:
... put fld "das mit einem Testdatum" into tDatum convert tDatum from abbr system date to seconds ### put the seconds - (60*60*24*365) into VorEinemJahr tDatum - (60*60*24*365) into VorEinemJahr put 0 into AnzahlJüngerals1Jahr ...
-
Januar 2, 2021 um 19:33 Uhr #25568
der Code sieht jetzt so aus:
on mouseUp pMouseButton put fld "KrankentageConny" into tData ## TAB getrennt, denke ich? ## Sonst itemdel anpassen: set itemdel to TAB ##put the seconds - (60*60*24*365) into VorEinemJahr put fld "Testdatum" into tDatum put tDatum - (60*60*24*365) into VorEinemJahr put 0 into AnzahlJüngerals1Jahr repeat for each line tLine in tData put item 1 of tLine into tDatum convert tDatum from abbr system date to seconds if tDatum >= VorEinemJahr then add 1 to AnzahlJüngerals1Jahr end if end repeat answer AnzahlJüngerals1Jahr && "Zeilen haben Daten aus dem letzten Jahr." end mouseUp
bringt aber eine Fehlermeldung in der Zeile:
put tDatum - (60*60*24*365) into VorEinemJahr
-
Januar 2, 2021 um 19:46 Uhr #25569
Ahhh!
convert tDatum from abbr system date to seconds
hatte gefehlt.
-
Januar 2, 2021 um 20:02 Uhr #25570
Er zählt leider immer noch falsch.
Hier ist mal die Liste.Sa, 12. Jan 2019 Name ohne_A
Sa, 12. Mrz 2019 Name ohne_A
Fr, 5. Jul 2019 Name ohne_A
Mo, 8. Jul 2019 Name mit_A
Di, 9. Jul 2019 Name mit_A
Mi, 10. Jul 2019 Name mit_A
Do, 11. Jul 2019 Name mit_A
Fr, 12. Jul 2019 Name mit_A
Sa, 13. Jul 2019 Name mit_A
Sa, 24. Jul 2019 Name ohne_A
Mo, 26. Aug 2019 Name mit_A
Di, 27. Aug 2019 Name mit_A
Mi, 28. Aug 2019 Name mit_A
Do, 29. Aug 2019 Name mit_A
Fr, 30. Aug 2019 Name mit_A
Sa, 31. Aug 2019 Name mit_A
So, 1. Sep 2019 Name mit_A
Mo, 2. Sep 2019 Name mit_A
Di, 3. Aug 2019 Name mit_A
Mi, 4. Aug 2019 Name mit_A
Do, 5. Aug 2019 Name mit_A
Fr, 6. Aug 2019 Name mit_A
Sa, 7. Aug 2019 Name mit_A
Mo, 16. Sep 2019 Name mit_A
Di, 17. Sep 2019 Name mit_A
Mi, 18. Sep 2019 Name mit_A
Mo, 30. Dez 2019 Name ohne_A
Di, 31. Dez 2019 Name ohne_A
Do, 2. Jan 2020 Name mit_A
Fr, 3. Jan 2020 Name mit_A
Fr, 6. Mrz 2020 Name ohne_A
Sa, 7. Mrz 2020 Name ohne_A
Sa, 4. Apr 2020 Name ohne_A
Mo, 4. Mai 2020 Name ohne_A
Di, 5. Mai 2020 Name ohne_A
Di, 16. Jun 2020 Name ohne_A
Mi, 17. Jun 2020 Name ohne_A
Fr, 19. Jun 2020 Name ohne_A
Fr, 26. Jun 2020 Name mit_A
Sa, 27. Jun 2020 Name mit_A
Di, 8. Sep 2020 Name ohne_A
Mo, 21. Sep 2020 Name ohne_A
Do, 8. Okt 2020 Name mit_A
Fr, 9. Okt 2020 Name mit_A
Mo, 26. Okt 2020 Name mit_A
Di, 27. Okt 2020 Name mit_A
Mi, 28. Okt 2020 Name mit_A
Fr, 6. Nov 2020 Name ohne_A
Mi, 11. Nov 2020 Name ohne_A
Mo, 16. Nov 2020 Name mit_A
Di, 17. Nov 2020 Name mit_A
Mi, 18. Nov 2020 Name mit_A
Do, 19. Nov 2020 Name mit_A
Fr, 20. Nov 2020 Name mit_A -
Januar 2, 2021 um 20:07 Uhr #25571
Im Feld “Testdatum” steht: Mo, 20. Sep 2021
und er zählt 14 Zeilen.
Es müssten aber 13 Zeilen sein.
Di, 8. Sep 2020 Name mit_A
dürfte er nicht mehr mitzählen. -
Januar 2, 2021 um 20:09 Uhr #25572
Kann es sein, dass die letzte Zeile (eine Leerzeile) auch mitgezählt wird?
-
Januar 2, 2021 um 20:21 Uhr #25573
Gerade überprüft.
Daran liegt es nicht. -
Januar 2, 2021 um 20:36 Uhr #25574
Bitte das hier noch einmal genau lesen:
https://www.livecode-blog.de/forums/topic/zeilen-in-listfield-die-aelter-als-1jahr-nicht-mitzaehlen/#post-25563Das hier -> Di., 12. Mrz 2019
(Der 12. März 2019 war ein Dienstag, kein Samstag wie in Deiner Liste!?)
wird nach der Zeile:
…
convert item 1 from abbr system date to seconds
…
IMMER NOCH zu nicht Weiterem als -> Sa, 12. Mrz 2019
Das wird das Problem sein.Um als gültiges “abbr system date” für LC zu gelten, müsste es heissen:
Di., 12. März 2019
Verstehst Du?Kommt denn da keine fehlermeldung von LC, wenn wir davon etwas subrahieren wollen?
-
Januar 2, 2021 um 20:41 Uhr #25576
Also ich bekomme eine Fehlermeldung wie oben angedacht!
Die Liste oben IST doch eigentlich TAB getrennt, oder?
Also -> Sa, 7. Mrz 2020 TAB Name ohne_A
Beim Einfügen hier geht der TAB schon mal verloren, daher frage ich lieber noch einmal nach!Ich hoffe, wir reden nicht aneinander vorbei!?
-
Januar 2, 2021 um 20:44 Uhr #25578
Zur Sicherheit, ist dieses Format bei Dir im System als Datumsformat definiert?
-> Sa, 27. Jun 2020Frag LC mal:
answer the abbr system date
oder
put the abbr sytem date
dann kannst Du es in der Messagebox kopieren und hier posten.Mag ja bei Dir anders sein als bei mir!?
-
Januar 2, 2021 um 20:56 Uhr #25580
Ja, ist es.
ich weiß nicht warum, aber jetzt scheint es zu funktionieren. -
Januar 2, 2021 um 21:11 Uhr #25581
Oft trügt der Schein… 😎
-
Januar 2, 2021 um 21:47 Uhr #25583
Stimmt!
Geht leider immer noch nicht richtig.
Ich bekomme immer einen Tag zuviel angezeigt. -
Januar 2, 2021 um 22:22 Uhr #25584
Wie ist denn jetzt Dein Datumsformat?
Frag LC mal:
answer the abbr system date
oder
put the abbr sytem date
dann kannst Du es in der Messagebox kopieren und hier posten. -
Januar 2, 2021 um 22:55 Uhr #25586
Wie schon gesagt, mein Datumsformat ist: -> Sa, 27. Jun 2020
-
Januar 3, 2021 um 14:22 Uhr #25596
Hi,
probier ich’s halt nochmal, schau mer ob das Forum diesen Post auch wieder frisst …Also:
Wenn “Datums” eh konvertiert werden müssen (speziell wenn damit gerechnet werden soll), dann ist “dateItems” das Format der Wahl – das rechnet nämlich selber (mit einem kleinen Trick), und korrekt! Beispiel:put "Di, 28. Feb 2019" into myDate convert myDate from abbrev system date to dateItems -- umwandeln --> myDate: 2019,2,28,0,0,0,5 put item 1 of myDate into myYear -- da ist das Jahr, falls wir das suchen! add 3 to item 3 of myDate -- 3 Tage später ... --> myDate: 2019,2,31,0,0,0,5 -- addiert, aber inkorrektes Datum convert myDate from dateItems to dateItems -- Hier wird korrigiert! --> myDate: 2019,3,3,0,0,0,1 -- jetzt stimmt es. put "Di, 28. Feb 2020" into myDate convert myDate from abbrev system date to dateItems -- umwandeln add 3 to item 3 of myDate -- 3 Tage später ... convert myDate from dateItems to dateItems -- Hier wird korrigiert! --> myDate: 2020,3,2,0,0,0,2 -- Schaltjahr ist berücksichtigt!
DateItems ist auch zweckmäßig, wenn Datums-Daten irgendwie gespeichert werden müßen – DIN 5008/ ISO 8601 bietet sich da an. Ist auch als “SQL Datum” bekannt: JJJJ-MM-TT
Universell verwendbar, sortiert auch alphanumerisch – nur LC kennt es leider nicht :/ Also:put item 1 of myDate & "-" & \ format("%02s", item 2 of myDate) & "-" & \ format("%02s", item 3 of myDate) into myDate --> myDate: 2020-03-02
Und schon hat man ein korrektes, überall verwendbares Datum.
Zurück, für die Anzeige:set itemdel to "-" -- - als Trenner put item 1 of myDate & "," & \ item 2 of myDate & "," & \ item 3 of myDate & ",0,0,0,0" into myDate set itemdel to comma -- ItemDel zurücksetzen ... convert myDate from dateItems to short system date --> myDate: 02.03.2020
Schönes Neues Jahr!
Edit: Fehler im Code korrigiert …
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.