Bonjour,

J'essaye de parcourir et d'afficher une table de tables de tables...

Mon code est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
local function arrayPrint(var, indent)
	local k,v
	local line
	if(type(var)~="table") then
		print(indent, tostring(var))
		return
	end
 
	for k,v in pairs(var) do
	-- for k,v in next, var do
		if(type(k)=="string") then
			line = string.format("['%s'] => ", k)
		else
			line = string.format("[%s] => ", tostring(k))
		end
 
		if(type(v)=="table") then
			print(indent..line.."{")
			arrayPrint(v, indent.."\t")
			print(indent.."}")
			return
		else
			print(indent..line..tostring(v))
		end
	end
end
 
-- Version simplifiée de https://eco.gamepedia.com/Module:CraftingRecipes
local completeList = {
	recipes = {
		['Acorn Powder Recipe'] = {
					['dispCraftStn'] = 1,
					['checkImage'] = 1,
					['craftStn'] = {'Mill',nil},
					['item1'] = {'Acorn Powder',nil,'1'},
					['item2'] = {nil},
					['skillNeed'] = {'Mill Processing',nil,'4'},
					['mater1'] = {'Acorn',nil,'10'},
					['mater2'] = {nil},
					['mater3'] = {nil},
					['mater4'] = {nil},
					['ctime'] = '5 minutes',
					['affSkill1'] = {'Mill Processing Efficiency',nil},
					['affSkill2'] = {'Mill Processing Speed',nil},
					},
		['Charred Corn Recipe'] = {
					['dispCraftStn'] = 1,
					['checkImage'] = 1,
					['craftStn'] = {'Campfire',nil},
					['item1'] = {'Charred Corn',nil,'1'},
					['item2'] = {nil},
					['skillNeed'] = {'Campfire Cooking',nil,'2'},
					['mater1'] = {'Corn',nil,'3'},
					['mater2'] = {nil},
					['mater3'] = {nil},
					['mater4'] = {nil},
					['ctime'] = '2 minutes',
					['affSkill1'] = {'Campfire Cooking Efficiency',nil},
					['affSkill2'] = {'Campfire Cooking Speed',nil},
					},
	},
	items = {
		['Acorn'] = { 'Acorn Powder Recipe', },
		['Acorn Powder'] = { 'Acorn Powder Recipe', },
		['Charred Corn'] = { 'Advanced Campfire Cooking Skill Book Recipe', 'Charred Corn Recipe', },
		['Corn'] = { 'Campfire Stew Recipe', 'Charred Corn Recipe', 'Mixed Vegetable Medley Recipe', },
	},
	tables = {
		['Campfire'] = { 'Charred Corn Recipe', },
		['Mill'] = { 'Acorn Powder Recipe', },
	},
	groups = {
		['Food'] = { 'Acorn Powder Recipe', 'Charred Corn Recipe', },
		['World Object Items'] = { 'Campfire Recipe', 'Mill Recipe',  },
	},
}
 
-- Utilisation de la table
local recipeList = completeList.recipes
 
print("######## START PRINT FULL LIST 1 ########")
arrayPrint(recipeList, "")
print("######## END PRINT FULL LIST 1 ########")
print("")
print("######## START PRINT Charred Corn Recipe ########")
arrayPrint(recipeList['Charred Corn Recipe'],"")
print("######## START PRINT Charred Corn Recipe ########")
print("")
print("######## START PRINT FULL LIST 1 ########")
arrayPrint(recipeList, "")
print("######## END PRINT FULL LIST 1 ########")
Je n'arrive pas à comprendre :
  1. Pourquoi il n'affiche pas toute la table.
    • Sur le web j'ai pu voir qu'il pouvais y avoir des problèmes lors du parcours de table avec pairs ... mais uniquement si l'on modifie la table pendant le parcours. Or je ne fait que de l'affichage
    • Dans la fonction "arrayPrint" j'ai essayé de remplacer "pairs" par "next" (lignes 9-10) mais cela ne fonctionne pas mieux.
    • J'ai pensé que certaines valeurs pouvaient être écrasées lors de la création de la table dans la RAM mais les valeurs non affichées sont belles et bien accessibles si on les demandent manuellement. Et, même après avoir affiché une valeur en y accédant manuellement, le programme ne l'affiche plus...
  2. Pourquoi il n'affiche pas la même chose lors de plusieurs exécutions successives du fichier...


Si quelqu'un à des explications sur ce comportement je suis preneur.
Note 1 : j'ai essayé de mettre le fichier source pièce jointe mais le site me dit que le fichier est invalide...
Note 2 : j'ai essayé avec plusieurs compilations de lua pour windows mais toutes donnent le même résultat. (Sauf LuaDist qui crache toujours la même sortie)