Startseite › Foren › Deutsches LiveCode-Forum › Sortieren einer lokalen Variable unter beibehaltung von Leerzeilen
Schlagwörter: Sortieren Leerzeilen beibehalten
- Dieses Thema hat 22 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 1 Jahr, 5 Monaten von Klaus Major.
-
AutorBeiträge
-
-
April 10, 2023 um 18:38 Uhr #47654
Guten Tag.
ich möchte gerne mit folgendem Script eine locale Variable, welche Untereinander aufgelistete Ziffern enthält so sortieren, dass am Ende das Ergebnis eine Liste ist, welche absteigend sortiert ist.
Das funktioniert aber die Leerzeilen in dem Ergebnis werden leider entfernt.
global gAktuelleKalenderwoche, gActualYear
on mouseUp pMouseButton put "Mo,Di,Mi,Do,Fr,Sa" into MyVar repeat for each item Temp in MyVar put (fld ("Sum" & Temp) of grp ("Leistung " & gAktuelleKalenderwoche) of grp ("Leistung " & gActualYear))& cr after tContainer end repeat answer tContainer sort tContainer descending numeric by item 1 of each answer tContainer end mouseUp
Wer kann helfen?
-
April 12, 2023 um 10:09 Uhr #47655
Leerzeilen werden nicht entfernt mit “sort”, sondern sie rutschen nur all nach oben.
Was Du möchtest wird mit “sort” einfach nicht funktionieren!
Hast Du das mit dem “Resturlaub” schon geklärt? 😎
-
April 12, 2023 um 11:17 Uhr #47656
So, nach einen leckeren Frühstück habe ich die Lösung!
Wir gehen durch jede Zeile und wenn sie leer ist, erstzen wir sie durch einen String OHNE CR, der HÖCHSTWAHRSCHEINLICH nicht im eigentlichen Text vorkommt.
Danach sortieren wir wie gewünscht und ersetzen den String wieder durch CR, et voila, Sortierung wie gewünscht und alle Leerzeilen da, wo sie hingehör(t)en.
########################################
on mouseUp pMouseButton
put “Mo,Di,Mi,Do,Fr,Sa” into MyVar
repeat for each item Temp in MyVar
put (fld (“Sum” & Temp) of grp (“Leistung ” & gAktuelleKalenderwoche) of grp (“Leistung ” & gActualYear))& cr after tContainer
end repeat
answer tContainer
repeat for each line tLine in tContainer
if tLine <> EMPTY then
put tLine & CR after tNewData
else
put “<xyxyxy>” after tNewData
end if
end repeat
if char -1 of tNewData = CR then
delete char -1 of tNewData
end if
set itemdel to TAB
sort lines of tNewData descending numeric by item 1 of each
replace “<xyxyxy>” with CR in tNewData
answer tNewData
end mouseUp
##########################
-
April 12, 2023 um 11:26 Uhr #47657
Ich geb es auf mit der Formatierung von LC Quelltext…
Wie hast Du das hinbekommen in Deinem Posting oben?
-
April 12, 2023 um 14:28 Uhr #47658
Test der Formatierung für CODE:
on mouseup
beep
end mouseup
Au man, sieht das übel aus…
-
April 12, 2023 um 21:03 Uhr #47659
Guten Abend Klaus.
Danke für deine Mühe, aber leider fürt dein Script nicht zum gewünschten Ergebnis.Nachdem ich die Formatierung von deinem Script korrigiert habe, bekomme ich vom ersten
answer tContainer folgendes angezeigt:Leerzeile
7.5
Leerzeile
8.5
9.5
10.5wobei ich hier nur zur Verdeutlichung die Leerzeile mit Leerzeile tituliere. Da steht natürlich nix 😉
und das zweite answer tNewData zeigt:
10.5
9.5
Leerzeile
7.5
Leerzeile
8.5Gewünscht ist aber folgendes Ergebnis:
Leerzeile
10.5
Leerzeile
9.5
8.5
7.5Ach ja, deine Frage wegen der Formatiereung von LC Quelltext.
Ich klicke zuerst auf die Registerkarte Text (oben in der Titelleiste des Nachrichtenfensters), bevor ich anfange meine Frage zu formulieren.
Wenn ich dann einen Quelltext einfüge möchte, kopiere ich diesen und füge ihn mit einem Rechtsklick in das Nachrichtenfenster und im daraufhin erscheinenden Kontextfenster mit klick auf Einfügen ein.
Danach wähle ich den Quelltext mit der Maus aus und klicke auf das Wort CODE oben in der Titelleiste des Nachrichtenfensters.
Das ist alles. -
April 12, 2023 um 21:33 Uhr #47660
Hm, ich hatte das hier ausprobiert, und es funktionierte wie gewünscht!?
Allerdings nur mit einfachem Text OHNE Tabs.
Kannst Du mir mal tContainer als Text zuschicken, damit ich korrekte Daten zum Testen habe?
Danke!
klaus AT major-k.de
Mit der Formatierung bekomme ich immer das im vorherigen Post…
-
April 12, 2023 um 21:40 Uhr #47661
Ach so, jetzt habe ich das erst verstanden!
Ich dachte pro Zeile sollten die eventuell nachfolgenden Leerzeilen mitkommen, aber die Leerzeilen sollen wieder an der selben Stelle wie vorher stehen, richtig?
-
April 12, 2023 um 23:37 Uhr #47662
Ja genau.
-
April 13, 2023 um 00:08 Uhr #47663
Danke für deine Mühe.
Aber du musst dir meine Anfrage (#47659) genauer anschauen. Da steht doch schon der Inhalt von tContainer!?!
Die Zahlen dokumentieren den jeweiligen Resturlaub und sollen jetzt chronologisch in die richtige Reihenfolge gebracht werden. Dabei ist es wichtig, das die Leerzeilen erhalten bleiben, weil ja an diesen Tagen kein Urlaubstag eingetragen wurde.
Ich hoffe es einigermaßen verständlich beschrieben zu haben.
Schade, das man hier keine Bilder hochladen kann.
Manchmal sagt ein Bild mehr als tausend Worte ha ha.Obwohl…
Auf dem Reiter Visuell, unter Einfügen gibt es die Möglichkeit Bilder einzufügen.
Aber das funktioniert offensichtlich nicht. Es wird nur ein Platzhalter angzeigt. -
April 13, 2023 um 10:04 Uhr #47668
Danke, jetzt hab ich es endlich gerafft! 😀
Ich überleg mir was…
Ich fürchte, Bilder können nur per Link eingefügt werden, also die müssten dann irgendwo schon online bereitstehen.
-
April 13, 2023 um 13:19 Uhr #47671
So, Lösung gefunden, aber eher „von hinten durch die Brust ins Auge“! ?
Schau es an und lass es Dir langsam auf der Zunge zergehen!
Bei Fragen bitte fragen.on mouseUp put empty into tContainer put empty into tAlleZeilen put empty into tGesamtZeilen put empty into tData put „Mo,Di,Mi,Do,Fr,Sa“ into MyVar repeat for each item Temp in MyVar put (fld („Sum“ & Temp) of grp ("Leistung " & gAktuelleKalenderwoche) of grp ("Leistung " & gActualYear))& cr after tContainer end repeat answer tContainer ## Wieviele Zeilen haben wir insgesamt: put the num of lines of tContainer into tGesamtZeilen ## Bei repeat for each müssen wir manuell einen Zähler verwalten: put 1 into tCounter repeat for each line tLine in tContainer ## Wir sammeln alle Daten (= nicht leere Zeilen) in tData, ## das werden wir später sortieren if tLine <> EMPTY then put tLine & CR after tData ## Wir merken uns auch Nummern die nicht leeren Zeilen haben: put tCounter & CR after tVolleZeilen end if add 1 to tCounter end repeat ## Aufräumen if char -1 of tData = CR then delete char -1 of tData end if if char -1 of tVolleZeilen = CR then delete char -1 of tVolleZeilen end if ## Wir erstellen auf diese Weise eine Variable mit tGesamtZeilen Leerzeilen put EMPTY into line tGesamtZeilen of tAlleZeilen ## Jetzt alle vollen Zeilen sortieren... set itemdel to TAB sort lines of tData descending numeric by item 1 of each put 1 into tCounter2 ## ... und füllen die nicht leeren Zeilen wieder mit Inhalt. ## Aber in umgekehrter Reihenfolge, da wir sortiert haben. ## Somit bleiben alle leeren Zeilen erhalten und an der korrekten Stelle! repeat for each line tLine in tVolleZeilen put line tCounter2 of tData into line tLine of tAlleZeilen add 1 to tCounter2 end repeat answer tAlleZeilen end mouseUp
EDIT:
Habe das (tData) mal korrigiert und Dein “put empty into…” hinzugefügt. -
April 13, 2023 um 22:53 Uhr #47673
Nach einer kleinen Korrektur:
aus
put line tCounter2 of tNewData into line tLine of tAlleZeilen
wurde
put line tCounter2 of tData into line tLine of tAlleZeilen
hat es auch bei mir funktioniert.Außerdem musste ich ganz am Anfang die Variablen mit:
put empty into tContainer put empty into tAlleZeilen put empty into tGesamtZeilen put empty into tData
leeren, weil sonst “solange die Anwendung nicht beendet wurde” bei weiteren Einträgen die Liste immer länger wurde.
Ansonsten ist deine Lösung mal wieder auf den Punkt gebracht.
Vielen Dank für deine Mühe. -
April 14, 2023 um 09:55 Uhr #47674
Ach ja, hatte die Namen der Variablen am Ende geändert, da ist mir tData wohl durch die Lappen gegangen.
Sorry, wusste nicht, daß Du hier mit lokalen oder globalen Variablen arbeitest.
Aber prima, daß es nun bei Dir läuft. 🙂Wie Du siehst, habe ich es nun auch mit der korrekten Darstellung von CODE etc. geschafft!
Hat etwas gedauert, bis ich herausbekommen hatte, daß ich hioer oben rechts TEXT einstellen musste.Dein entsprechender Hinweis oben war mir leider entschlüpft…
-
April 18, 2023 um 20:31 Uhr #47675
Hallo Klaus.
Ich brauche nochmal etwas Hilfe.
Ich wollte gerne, dass nur Zeilen in tContainer landen, bei denen das Urlaubssymbol eingeblendet (sichtbar) ist.Dazu habe ich unser Script am Anfang wie folgt ergänzt:
put "Mo,Di,Mi,Do,Fr,Sa" into MyVar ## Nur Zeilen mit sichtbaren Urlaubssymbolen berücksichtigen. repeat for each item Temp in MyVar put the short name (img ("Urlaub!" & Temp) into tImage if the visible of img tImage of grp ("Leistung " & gAktuelleKalenderwoche) of grp ("Leistung " & gActualYear) is true then repeat for each item Temp in MyVar put (fld ("Sum" & Temp) of grp ("Leistung " & gAktuelleKalenderwoche) of grp ("Leistung " & gActualYear))& cr after tContainer end repeat end if end repeat answer tContainer ## Wieviele Zeilen haben wir insgesamt: put the num of lines of tContainer into tGesamtZeilen
Allerdings bekomme ich jetzt eine Ausgabe in tContainer (Ich habe als Test Di und Do jeweils 1 Tag Urlaub eingetragen) die so aussieht:
Leerzeile (also nüscht)
7.5 (Der Resturlaub am Dienstag)
Leerzeile
8.5 (Der Resturlaub am Mittwoch)
Leerzeile
LeerzeileLeerzeile (also nüscht)
7.5 (Der Resturlaub am Dienstag)
Leerzeile
8.5 (Der Resturlaub am Mittwoch)
Leerzeile
LeerzeileWie du sehen kannst, wird tContainer 2x identisch gefüllt.
Wo liegt hier der Fehler?
Ich verstehe es nicht. -
April 19, 2023 um 10:11 Uhr #47676
Ist das das gesamte Skript?
Hinweis:
put the short name (img ("Urlaub!" & Temp) into tImage
The short name of img (“Urlaub!” & Temp) IST (“Urlaub!” & Temp) 😀 -
April 19, 2023 um 16:01 Uhr #47677
Quick guess: Kommentiere den inneren “repeat” Lopp mal aus!
Du hast nämlich zwei Mal -> repeat for each item Temp in MyVar -
April 19, 2023 um 20:07 Uhr #47678
Quick guess: Kommentiere den inneren „repeat“ Lopp mal aus!
Dann fehlen leider die Leerzeilen.
-
April 19, 2023 um 20:09 Uhr #47679
OK, dann schaue ich mir das noch einmal genauer an.
-
April 20, 2023 um 10:00 Uhr #47680
Vielleicht haben wir uns missverstanden, ich meinte es so, nur den REPEAT, nicht dessen Inhalt:
put "Mo,Di,Mi,Do,Fr,Sa" into MyVar ## Nur Zeilen mit sichtbaren Urlaubssymbolen berücksichtigen. repeat for each item Temp in MyVar put the short name (img ("Urlaub!" & Temp) into tImage if the visible of img tImage of grp ("Leistung " & gAktuelleKalenderwoche) of grp ("Leistung " & gActualYear) is true then ## repeat for each item Temp in MyVar put (fld ("Sum" & Temp) of grp ("Leistung " & gAktuelleKalenderwoche) of grp ("Leistung " & gActualYear))& cr after tContainer ## end repeat end if end repeat answer tContainer ## Wieviele Zeilen haben wir insgesamt: put the num of lines of tContainer into tGesamtZeilen
-
April 20, 2023 um 10:03 Uhr #47681
Nee, wahrscheinlich auch nicht…
Die Lererzeilen entstehen, wenn das passende Bild (“Urlaub” & TEMP) unsichtbar ist, richtig?
Wenn ja, dann lass die IF Abfrage und das REPEAT mal weg.Sorry, ohne den Stack kann ich nur raten…
-
April 21, 2023 um 23:26 Uhr #47682
Hallo Klaus.
Erst mal Danke für deine Hilfsbereitschaft. (Ist ja schließlich auch deine Freizeit).
Ich habe es jetzt so gelöst:global gAktuelleKalenderwoche, gActualYear local tContainer, tImage on mouseUp pButtonNumber SortReverse end mouseUp on SortReverse put "Mo,Di,Mi,Do,Fr,Sa" into MyVar put empty into tContainer put empty into tAlleZeilen put empty into tGesamtZeilen put empty into tData put "Mo,Di,Mi,Do,Fr,Sa" into MyVar repeat for each item Temp in MyVar put (fld ("MyOldVacation" & Temp)) & cr after tContainer end repeat ##answer tContainer ## Wieviele Zeilen haben wir insgesamt: put the num of lines of tContainer into tGesamtZeilen ## Bei repeat for each müssen wir manuell einen Zähler verwalten: put 1 into tCounter repeat for each line tLine in tContainer ## Wir sammeln alle Daten (= nicht leere Zeilen) in tData, ## das werden wir später sortieren if tLine <> EMPTY then put tLine & CR after tData ## Wir merken uns auch Nummern die nicht leere Zeilen haben: put tCounter & CR after tVolleZeilen end if add 1 to tCounter end repeat ## Aufräumen if char -1 of tData = CR then delete char -1 of tData end if if char -1 of tVolleZeilen = CR then delete char -1 of tVolleZeilen end if ## Wir erstellen auf diese Weise eine Variable mit tGesamtZeilen Leerzeilen put EMPTY into line tGesamtZeilen of tAlleZeilen ## Jetzt alle vollen Zeilen sortieren... set itemdel to TAB sort lines of tData descending numeric by item 1 of each put 1 into tCounter2 ## ... und füllen die nicht leeren Zeilen wieder mit Inhalt. ## Aber in umgekehrter Reihenfolge, da wir sortiert haben. ## Somit bleiben alle leeren Zeilen erhalten und an der korrekten Stelle! repeat for each line tLine in tVolleZeilen put line tCounter2 of tData into line tLine of tAlleZeilen add 1 to tCounter2 end repeat ##answer tAlleZeilen ##answer "ich sortiere jetzt" if the visible of img "Urlaub!Mo" of grp ("Leistung " & gAktuelleKalenderwoche) of grp ("Leistung " & gActualYear) is true and\ line 1 of tAlleZeilen <> empty then put line 1 of tAlleZeilen into fld "MyOldVacationMo" put fld "MyOldVacationMo" into fld "SumMo" of grp ("Leistung " & gAktuelleKalenderwoche) of grp ("Leistung " & gActualYear) end if if the visible of img "Urlaub!Di" of grp ("Leistung " & gAktuelleKalenderwoche) of grp ("Leistung " & gActualYear) is true and\ line 2 of tAlleZeilen <> empty then put line 2 of tAlleZeilen into fld MyOldVacationDi put fld "MyOldVacationDi" into fld "SumDi" of grp ("Leistung " & gAktuelleKalenderwoche) of grp ("Leistung " & gActualYear) end if if the visible of img "Urlaub!Mi" of grp ("Leistung " & gAktuelleKalenderwoche) of grp ("Leistung " & gActualYear) is true and\ line 3 of tAlleZeilen <> empty then put line 3 of tAlleZeilen into fld MyOldVacationMi put fld "MyOldVacationMi" into fld "SumMi" of grp ("Leistung " & gAktuelleKalenderwoche) of grp ("Leistung " & gActualYear) end if if the visible of img "Urlaub!Do" of grp ("Leistung " & gAktuelleKalenderwoche) of grp ("Leistung " & gActualYear) is true and\ line 4 of tAlleZeilen <> empty then put line 4 of tAlleZeilen into fld MyOldVacationDo put fld "MyOldVacationDo" into fld "SumDo" of grp ("Leistung " & gAktuelleKalenderwoche) of grp ("Leistung " & gActualYear) end if if the visible of img "Urlaub!Fr" of grp ("Leistung " & gAktuelleKalenderwoche) of grp ("Leistung " & gActualYear) is true and\ line 5 of tAlleZeilen <> empty then put line 5 of tAlleZeilen into fld MyOldVacationFr put fld "MyOldVacationFr" into fld "SumFr" of grp ("Leistung " & gAktuelleKalenderwoche) of grp ("Leistung " & gActualYear) end if if the visible of img "Urlaub!Sa" of grp ("Leistung " & gAktuelleKalenderwoche) of grp ("Leistung " & gActualYear) is true and\ line 6 of tAlleZeilen <> empty then put line 6 of tAlleZeilen into fld MyOldVacationSa put fld "MyOldVacationSa" into fld "SumSa" of grp ("Leistung " & gAktuelleKalenderwoche) of grp ("Leistung " & gActualYear) end if end SortReverse
Ich habe an Stelle der Abfrage nach sichtbaren Urlaubssymbolen einfach die vorhandenen Felder “MyOldVacationMo” bis “MyOldVacationSa” verwendet.
Weil es neben den Urlaubssymbolen noch 4 weitere Symbole gibt, wäre das ganze zu Aufwendig geworden.
So funktioniert es schon ganz wie ich wollte.
Was hältst du davon?
Oder hast du eine bessere Idee? -
April 22, 2023 um 10:22 Uhr #47683
Ohne den Stack mal zu sehen, kann ich das leider so rein theroretisch mittlerweile nicht ganz nachvollziehen…
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.