Форум программистов, компьютерный форум, киберфорум
Наши страницы

Сохранение таблицы в файл - Lua

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Lua string.lower http://www.cyberforum.ru/lua/thread1009280.html
del
Lua Столкновение объектов и уничтожение без physics Изучать Lua начал буквально вчера. Любопытно, как еще возможно определить столкновение двух объектов ( например кругов ) так, что бы они, при столкновении, уничтожились? Допустим будет на экране N... http://www.cyberforum.ru/lua/thread1003519.html
lua script Lua
Такое дело: Есть изображения, и есть скрипт на Lua, который эти изображения "исполняет". Как собственно из этого сделать приложение exe?
Lua Сборка библиотеки
Возникла необходимость написать на C++ собственную библиотеку для Lua. Для начала компилирую тестовую библиотеку, взятую из примеров. Исходник: #include <time.h> #include <stdlib.h> extern...
Lua Переделать мод http://www.cyberforum.ru/lua/thread974747.html
мне хочеться найти программиста в lua,который поможет мне переделать мод на supreme commander forged alliance,кто хочет помочь,стучитесь в скайп sasbucha.
Lua Какое значение при обработке символа имеют буквы s, d, f ? Какое значение при обработке символа имеют буквы s, d, f ? подробнее

Показать сообщение отдельно
proger_Dencheek
0 / 0 / 0
Регистрация: 30.10.2013
Сообщений: 2
16.01.2014, 17:30
Еще вариант:
PHP
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
local types = {
    bool = 0x0,
    number = 0x1,
    string = 0x2,
    table = 0x3,
    endtable = 0x4
}
local types_char = {
    bool = string.char(0x0),
    number = string.char(0x1),
    string = string.char(0x2),
    table = string.char(0x3),
    endtable = string.char(0x4)
}
 
--Запаковываем массив и записываем в файл
--Внимание! Строки в структуре не должны содержать символов с кодами 0-31
local pack_array = function(t, f)
    if t == nil or type(t) ~= "table" or next(t) == nil then
        return false
    end
    if f == nil then
        return false
    end
    for k,v in pairs(t) do
        if v ~= nil then
            if type(k) == "number" then
                f:write(types_char.number)
                f:write(tostring(k))
            elseif type(k) == "string" then
                f:write(types_char.string)
                f:write(k)
            else
                error("unsupported key type (0) "..type(k))
            end
            if type(v) == "number" then
                f:write(types_char.number)
                f:write(tostring(v))
            elseif type(v) == "string" then
                f:write(types_char.string)
                f:write(v)
            elseif type(v) == "boolean" then
                f:write(types_char.bool)
                if v == true then
                    f:write("1")
                elseif v == false then
                    f:write("0")
                end
            elseif type(v) == "table" then
                f:write(types_char.table)
                pack_array(v, f)
                f:write(types_char.endtable)
            end
        end
    end
return true
end
 
--Распаковываем прочитанный из файла массив
local unpack_array = function(str, idx)
    local get_byte = function(_str, idx_)
        return string.byte(string.sub(_str, idx_, idx_)), idx_ + 1
    end
    local get_string = function(_str, idx_)
        local idx1 = string.len(_str) + 1
        for i=idx_,string.len(_str),1 do
            if string.byte(string.sub(_str,i,i)) < 32 then
                idx1 = i
                break
            end
        end
        return string.sub(_str,idx_,idx1-1),idx1
    end
    local get_num = function(_str,idx_)
        local st, idx1 = get_string(_str, idx_)
        return st+0, idx1
    end
    local get_bool = function(_str,idx_)
        local st, idx1 = get_string(_str, idx_)
        return st == "1", idx1
    end
    if str == nil or str == "" then
        return {}
    end
local ret = {}
local vtype = 0
idx = idx or 1
    while (true) do
        local key, value = 0, 0
        if idx > string.len(str) then
            return ret, idx
        end
        vtype, idx = get_byte(str, idx)
        if vtype == types.number then
            key, idx = get_num(str,idx)
        elseif vtype == types.string then
            key, idx = get_string(str, idx)
        elseif vtype == types.endtable then
            return ret, idx
        else
            error("unsupported key type (1) "..tostring(vtype))
        end
        vtype, idx = get_byte(str, idx)
        if vtype == types.number then
            value, idx = get_num(str, idx)
        elseif vtype == types.string then
            value, idx = get_string(str, idx)
        elseif vtype == types.bool then
            value, idx = get_bool(str, idx)
        elseif vtype == types.table then
            value, idx = unpack_array(str, idx)
        else
            error("unsupported key type (2) "..tostring(vtype))
        end
        ret[key] = value
    end
end
 
--Записываем
function write(path, tbl)
local f = io.open(path, "w")
    if f ~= nil then
        pack_array(tbl, f)
        f:close()
    end
end
 
--Читаем
function read(path)
local f = io.open(path, "r")
    if f ~= nil then
        local data = unpack_array(f:read("*a")) --Новый метод чтения
        f:close()
        return data
    else
        return {}
    end
end
 
--Используем
--...
write("my_file.txt", tbl)
--...
local tbl = read("my_file.txt")
Этот скрипт хорош тем, что быстро выполняется и записывает толстые таблицы за сотые доли секунды.
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru