2017-10-16 7 views
3

Je suis nouveau à lua. J'ai une requête liée à la lecture de table à partir du fichier. Je dispose d'un fichier de configuration sous forme de tableau lua: exemple:comment lire le fichier de configuration qui contient la table lua

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

Comment je lis ce fichier et accéder à mes paramètres du fichier de configuration?

+1

Les fichiers de configuration contenant du code non contrôlé sont une mauvaise idée. Soyez prudent avec ces – Matt

+1

Vous avez oublié '},' de fermer la première table "param1" –

Répondre

2

Si vous voulez lire le fichier de configuration en utilisant un autre script Lua:

configdata = nécessitent ("configfile")

Notez que 'require' ne peut charger des fichiers Lua. En outre, n'incluez PAS l'extension '.lua' lors de l'utilisation de 'require'.

+0

Votre "hard way" est une merde totale. Vous lisez le fichier par ligne et re-concaténer (quadratiquement lent! Juste ouvrir le fichier et ': lire" * un "' - vous ne modifiez pas le contenu). Ensuite, vous loadstring le résultat (qui est une fonction que vous pouvez appeler aussi souvent que vous le souhaitez), mais appelez cela immédiatement et donc envelopper le code interne d'abord pour affecter le code réel en tant que fonction à une variable globale. 'configData = fichier de chargement" config.lua "' a le même effet que vos 5 lignes, sans toutes les absurdités. – nobody

+0

@nobody Votre façon de commenter est une merde totale. Vous pourriez aussi bien me conseiller d'utiliser: "lire" à la place de i.lines sans essayer de m'insulter. En outre, lisez la raison derrière le mode "dur" avant de l'appeler stupide. J'ai appris Lua par livre, pas par internet. Donc, ma façon d'écrire du code peut différer beaucoup de la vôtre, mais cela ne signifie pas que vous devriez exprimer votre frustration de cette façon. Ce site est conçu pour apprendre, pas pour appeler quelqu'un de stupide pour écrire du code différemment. Mais thx, je vais utiliser ': lire "* un" à la place –

+0

(Side-branche :) IMHO appelant "accidentellement quadratique" code "merde tout à fait" est adéquate. Vous semblez prendre ça personnellement, ce qui n'était pas l'effet escompté: désolé à ce sujet. Pour voir à quel point la concaténation est mauvaise, essayez 'local c =" "; pour i = 1, 1e6 do c = c .. "." end' vs 'local t = {}; pour i = 1, 1e6 fais t [i] = "." fin ; local c = table.concat (t) '. Les deux font le même travail de concaténation de 1M caractères, mais tandis que le second prend ~ 0.5s, le premier prend _over trois minutes_! (Voir pourquoi je dis c'est de la merde?) Donc: lors de la concaténation dans une boucle, accumuler dans une table & 'table.concat' à la fin! – nobody

2

Vous pouvez simplement require le fichier de configuration dans votre source d'application.

local config = require "config" 
+1

'require' accepte un nom * module *, pas un nom * fichier *. – lhf

+0

@lhf ah oui. Avait oublié à ce sujet. Fixé. – hjpotter92