Jump to content

Datensatz in Tabelle (Lua)


Timba

Empfohlene Beiträge

vor 7 Stunden schrieb Timba:

es müsste mit Tabelle genauso funktionieren.

Nein, damit funktioniert es leider nicht.

Eine Tabelle muss "iterable" - also lückenlos nummeriert - sein, damit table.remove() wie von dir gewünscht funktioniert.

In einer Liste ist der Index eine Zahl.
Eine Tabelle hat Namen als Bezeichner. Auch dann, wenn du als Namen eine Zahl verwendest. Deine 1 ist bei der Tabelle eine "1", also ein String.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb Goetz:

Eine Tabelle muss "iterable" - also lückenlos nummeriert - sein, damit table.remove() wie von dir gewünscht funktioniert.

Moin Götz,

die Antwort befriedigt mich überhaupt nicht.

Ich fülle eine Tabelle mit Objekten.

table.insert($("Ereignisse").variables["Probe"], $("Taste ▄")) 

Das Ergebnis ist eine lückenlos nummerierte Tabelle.

beispiel.jpg.e982808904f701fdabfcad7e1c78edad.jpg

Dann klicke ich viermal auf

table.remove($("Ereignisse").variables["Probe"], 1)  

Das Ergebnis ist nicht wie gewünscht Tabelle leer, sondern Tabelle mit leeren Einträgen.

beispiel1.jpg.9811b9683d61e022c07f31bbd7adc86d.jpg

Wenn ich genau denselben Versuch mache und lediglich das Objekt durch einen Text oder eine Zahl ersetze,

table.insert($("Ereignisse").variables["Probe"], "TEXT")    

beispiel2.jpg.153de6b2b46b1ddba515f7870fc14979.jpg

table.remove($("Ereignisse").variables["Probe"], 1)  

dann funktioniert es wie es soll.

beispiel3.jpg.b732ae462040b03ff558b161a64610d2.jpg

Es hat also nichts mit "iterabel" zu tun, sondern damit, ob es um ein Objekt oder ein anderes Element geht.

Probiere es gerne selbst aus, um dich zu überzeugen: Tabellentest.mbp

 

Gruß Timba

 

 

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 40 Minuten schrieb Timba:

Das Ergebnis ist nicht wie gewünscht Tabelle leer, sondern Tabelle mit leeren Einträgen.

Weil du sie im MBS als Tabelle angelegt hast. Und deine Zellen damit Namen haben. Keine Nummern.

Deshalb steht auch oben über der ersten Spalte "Namen"

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 1 Stunde schrieb Goetz:

Weil du sie im MBS als Tabelle angelegt hast. Und deine Zellen damit Namen haben. Keine Nummern.

Deshalb steht auch oben über der ersten Spalte "Namen"

Ok, und warum funktioniert es dann, wenn der Tabelleneintrag vom Typ Text ist, und bei Typ Objekt funktioniert es nicht? Für den Tabelleneintrag vom Typ Text gilt ja genauso "Weil du sie im MBS als Tabelle angelegt hast. Und deine Zellen damit Namen haben. Keine Nummern. Deshalb steht auch oben über der ersten Spalte 'Namen'"

aber table.remove entfernt den Datensatz trotzdem. Die Erklärung dafür fehlt mir. An den oben geposteten Bildern kannst du sehen, dass die Einträge völlig identisch sind, bis auf den kleinen Unterschied, dass der Tabelleninhalt einmal Objekt und einmal Text ist. Entsprechend funtioniert es einmal nicht und einmal doch. Die von dir gelieferte Erklärung würde reichen, wenn es in beiden Fällen nicht funktioniert. Das ist nicht der Fall.

Gruß Timba

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Timba,

Referenzen werden im Studio anders behandelt als einfache Datentypen, siehe dazu auch hier:

Ob eine Variable nil ist oder nicht existiert, macht im Studio und in Lua keinen Unterschied. Wenn dich nil-Einträge in Tabellen stören, dann weise ihnen zuerst einen einfachen Datentypen zu und setze sie dann nil, dann löscht das Studio sie (weil nil kein gültiger Wert für einen einfachen Datentyp ist).

Viele Grüße,

Neo

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Neo, danke für die Info. Der nil-Eintrag stört in diesem Fall nur deshalb, weil die Prüfung, ob ein Datensatz vorhanden ist ( #Liste > 0 ) ein "falsches" Resultat anzeigt. Jedenfalls gehe ich davon aus, dass ein nil-Eintrag gezählt wird, probiert habe ich es nicht. Ich werde einen Weg finden. Aber immerhin weiß ich nun, warum es so ist wie es ist.

Gruß Timba

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen.

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...