Anmelden

Archiv verlassen und diese Seite im Standarddesign anzeigen : Leeren inhalt einer Table automatisch loeschen



Stoned
04.08.2008, 15:15
also, ich hab das problem, dass wenn ich in meiner table


1 Droge
2 Rabid
3 Turk
4 Killa
5
6 Sport

zB ein leeres feld habe, funktioniert die funktion die mit der table arbeitet nicht mehr.

wie kann ich es also machen, dass wenn ein feld der table leer ist, dieser automatisch geloescht wird?

Lucid
04.08.2008, 16:24
gegenstaende = {}
gegenstaende["klappstuhl"] = 16
gegenstaende["tisch"] = 32
gegenstaende["hocker"] = 64
gegenstaende[""] = 128
gegenstaende["sessel"] = nil
gegenstaende["sofa"] = 512

function gegenstaende_zeigen()
for k, v in pairs(gegenstaende) do
if (k ~= nil and k ~= "" and v ~= nil and v ~= "") then
Msg("Wir haben " .. v .. " mal den " .. k)
end
end
end


Wir haben 16 mal den klappstuhl
Wir haben 32 mal den tisch
Wir haben 64 mal den hocker
Wir haben 512 mal den sofa

das sofa, ich weiss...

Scarecrow
04.08.2008, 21:28
also, ich hab das problem, dass wenn ich in meiner table


1 Droge
2 Rabid
3 Turk
4 Killa
5
6 Sport

zB ein leeres feld habe, funktioniert die funktion die mit der table arbeitet nicht mehr.

wie kann ich es also machen, dass wenn ein feld der table leer ist, dieser automatisch geloescht wird?

Solche Fehler können sehr fatal sein, wenn sie serverseitig sind und mit Daten arbeiten, die jeder Spieler manipulieren könnte (indem er z.B. in seinen Namen nur Leerzeichen macht).

PS: Fatal in dem Sinne, dass jeder das Script lahmlegen könnte.

Stoned
04.08.2008, 21:44
es ist nur cl :V

hier ma was von mir, aber es loescht nur 1zeile, dann muss ich es neu aufrufen usw, koennte man es nicht mit ner loop alle loeschen lassen ?


function deleteblank()
deltable = string.Explode("\n",datasave)
for k,del in pairs(deltable) do
if (del == nil or del == "") then
table.remove(deltable, k)
end
print(k,del)
end
file.Write("fixed_table.txt", table.concat( deltable, "\n" ) )
end

aus


...
4 Killa
5
6
7
8 Sport

wird


...
4 Killa
5
6
7 Sport

Pac_187
04.08.2008, 22:07
Wenn du 'n ganzen Inhalt aus einem Table löschen willst, dann brauchst
nur


table.remove( mytable )


machen...

Stoned
05.08.2008, 06:50
lol ne q.q

ich will die leeren felder automatisch loeschen ? zeigt doch das obrige beispiel :V

BennyG
05.08.2008, 10:48
Wenn es sich doch hier um Strings handelt,könnte er nicht einfach :


for k,v in pairs(table) do
if v == "" or v == nil then
table.remove(table,k)
end
end

Stoned
05.08.2008, 11:12
das hab ich ja ...

aber es loescht immer eins nach dem andren und nicht alle ...

Pac_187
05.08.2008, 15:33
Dann mach halt:



for i=1, #mytable do // #mytable zählt wie viel Einträge im Table sind
if mytable[i] == "" or mytable[i] == nil then
table.remove( mytable, i )
end
end