2017-10-16 5 views
3
enthält

Ich bin zu lua neu. Ich habe eine Abfrage im Zusammenhang mit dem Lesen von Tabellen aus der Datei. Ich habe eine Config-Datei in lua Tabellenformat: Beispiel:, wie man Konfigurationsdatei liest, die lua Tabelle

return { 
    ["param1"] = { 
     ["attribute"] = { 
      ["myparam"] = 1, 
     }, 
    ["param2"] = 1 
} 

Wie lese ich diese Datei und Zugriff auf meine Config-Datei-Parameter?

+1

Config-Dateien, die ungeprüften Code enthalten, sind eine schlechte Idee. Seien Sie vorsichtig mit diesen – Matt

+1

Sie vergessen '},' zu schließen erste "param1" Tabelle –

Antwort

2

Wenn Sie die Konfigurationsdatei mit einem anderen Lua Skript lesen möchten:

configdata = erfordern ("configfile")

Hinweis, dass 'erfordern' nur Lua-Dateien laden. Geben Sie bei Verwendung von 'require' auch nicht die Erweiterung '.lua' an.

+0

Ihr "harter Weg" ist völliger Mist. Sie lesen die Datei zeilenweise und wieder verketten (quadratisch langsam! Öffnen Sie einfach die Datei und ': lesen" * a "' - Sie ändern nichts von dem Inhalt). Dann "loadstring" Sie das Ergebnis (das ist eine Funktion, die Sie beliebig oft aufrufen können), aber rufen Sie diese sofort auf und umschließen Sie den inneren Code zuerst, um den tatsächlichen Code als Funktion einer globalen Variablen zuzuordnen. 'configData = loadfile" config.lua "' hat den gleichen Effekt wie deine 5 Zeilen, ohne den ganzen Unsinn. – nobody

+0

@nobody Ihre Art zu kommentieren ist völliger Mist. Du könntest mir auch nur raten, "statt" io.lines "* a" zu lesen, ohne mich zu beleidigen. Lesen Sie auch den Grund hinter dem "harten" Modus, bevor Sie ihn dumm nennen. Ich lernte Lua per Buch, nicht per Internet. Meine Art, Code zu schreiben, kann sich sehr von deinem unterscheiden, aber das bedeutet nicht, dass du deine Frustration auf diese Weise ausdrücken solltest. Diese Website ist zum Lernen gedacht, nicht um jemanden zu nennen, der dumm ist, Code anders zu schreiben. Aber Thx, ich werde ': lesen Sie "* a"' stattdessen –

+0

(Side-Zweig :) IMHO Aufruf "versehentlich quadratische" Code "völlige Mist" ist ausreichend. Du scheinst das persönlich zu nehmen, was nicht der beabsichtigte Effekt war: Entschuldigung. Um zu sehen, wie schlecht wiederholte Verkettungen sind, versuchen Sie 'local c =" "; für i = 1, 1e6 tun c = c .. "." Ende 'vs.' local t = {}; für i = 1, 1e6 t t [i] = "." Ende ; lokal c = table.concat (t) '. Beide machen die gleiche Aufgabe, 1M Charaktere zu verketten, aber während der zweite ~ 0.5s dauert, nimmt der erste _ _ 3 Minuten_! (Sehen Sie, warum ich sage, das ist Mist?) Also: Wenn Sie in einer Schleife verketten, akkumulieren Sie am Ende in eine Tabelle & 'table.concat'! – nobody

2

Sie können einfach require die Konfigurationsdatei in Ihrer Anwendungsquelle.

local config = require "config" 
+1

'require' akzeptiert einen * Modul * Namen, nicht einen * Datei * Namen. – lhf

+0

@lhf ah ja. Hatte das vergessen. Fest. – hjpotter92