Startseite › Foren › Deutsches LiveCode-Forum › Spalten zusammenführen
Schlagwörter: arrays tabellen spalten
- Dieses Thema hat 2 Antworten und 2 Teilnehmer, und wurde zuletzt aktualisiert vor 6 Monaten, 3 Wochen von Torsten.
-
AutorBeiträge
-
-
Februar 15, 2024 um 16:45 Uhr #47858
Hi,
eigentlich wollte ich fragen, ob jemand eine schnelle Methode kennt, wie man mehrere Texte in eine gemeinsame Tabelle integrieren kann, in der jeder Text eine Spalte mit mehreren Zeilen darstellt.
Ich hatte zuerst mit normalen String-Operationen gearbeitet, die aber bei der Größe der Daten (jeweils über 4000 Zeilen) zu langsam waren.
Dann hab’ ich mit der Magie der Arrays gespielt und es hat sich mal wieder voll gelohnt, das Teil ist sehr schnell 🙂Anbei mein Handler, der als Funktion geschrieben ist, die beliebig viele Parameter akzeptiert und in die Reihefolge der Parameter als Reihenfolge der Spalten in der Tabelle verwendet.
--------------------- function Lists2table --------------------- -- Erzeugt aus mehreren Texten eine Tabelle mit mehreren Spalten -- USE: put Lists2table(field "Eins", field "Zwei", field "Drei") into field "Tabelle" -- WICHTIG: die Texte dürfen in jeder Zeile entweder keine oder immer die gleiche Anzahl von Tabs haben ## Speichere die Parameter nach ihrer Reihenfolge in einem Array: 1. Paramter = tArray[1], etc. ## Parameter 1 = Spalte 1 repeat with i = 1 to the paramCount put param(i) into tArray[i] end repeat ## Finde heraus, welche Spalte die meisten Zeilen enthält, damit nachher alle Spalten gleich lang sind repeat for each key tKey in tArray put tKey & tab & the number lines in tArray[tKey] & cr after tLengthList end repeat sort lines of tLengthList numeric descending put trueword 2 of line 1 of tLengthList into tMaxLines --> maximale Zeilenanzahl der Tabelle ## Erzeuge für jede Zeile der Tabelle die entsprechenden Spalten aus den Paramtertexten repeat for each key tList in tArray put empty into tLineCounter repeat for each line tLine in tArray[tList] add 1 to tLineCounter put tLine into tListArray[tLineCounter][tList] end repeat ## wenn eine Liste kürzer ist als die längste, dann erzeuge leere Zellen pro Zeile repeat while tLineCounter < tMaxLines add 1 to tLineCounter put empty into tListArray[tLineCounter][tList] end repeat end repeat ## Erzeuge eine mehrspaltige Tabelle und sortiere sie nach der Zeilenindex-Spalte repeat for each key tIndex in tListArray put empty into tRow repeat with i = 1 to the paramCount put tListArray[tIndex][i] & tab after tRow end repeat delete last char of tRow put tIndex & tab & tRow & cr after tTable end repeat set itemdelimiter to tab sort lines of tTable numeric ascending by item 1 of each ## Entferne die Zeilenindex-Spalte repeat for each line tLine in tTable delete item 1 of tLine put tLine & cr after tCleanTable end repeat ## Gib die fertige Tabelle zurück return tCleanTable end Lists2table
Happy Coding
Torsten -
Februar 15, 2024 um 17:02 Uhr #47859
Ja, “repeat for each” und Arrays sind unschlagbar schnell in LC!
Da die Engine mit jeder Version von LC immer etwas “strenger” ist, empfehle ich, solche Kleinigkeiten zu vermeiden:
... repeat for each key tKey in tArray ## put tKey & tab & the number lines in tArray[tKey] & cr after tLengthList put tKey & tab & the number OF lines in tArray[tKey] & cr after tLengthList end repeat ...
-
Februar 15, 2024 um 18:21 Uhr #47860
Hej, danke, den habe ich übersehen (schreibe ich sonst immer rein, komisch, dass es überhaupt funktioniert…).
Habe beim drüberschauen noch eine kürzere Form gefunden:
put 0 into tMaxLines repeat for each key tKey in tArray if the number of lines in tArray[tKey] > tMaxLines then put the number of lines in tArray[tKey] into tMaxLines end repeat
-
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.