lua refresh/replace 利雅得
lua refresh/replace array2d
我的 array2d 有问题。我实际上想要计划有刷新命令。
我在 data.txt
上的数据
test1:30:1
test2:40:2
因此,每当我调用函数 ReadData 时。它会像这样发送到我的 Array2d:
line_data = {{"test1", "30", "1"},
{"test2", "40", "2"}}
但问题是我每次调用该函数。它总是会添加相同的数据,当我做一些活动时,我只想刷新或替换。
我的代码
line_data = {}
function ReadData()
local file = io.open("data.txt", "r")
for line in file:lines() do
line_data[#line_data+1] = { line:match('([^:]+):(%d+):(%d+)') }
end
end
也许你们可以帮我解决这个问题?
如果您想用新数据填充现有行,那么您需要一些 ID。如果该 id 只是名称,即字符串的第一部分,则更改将数据附加到数组的行:
-- old code
-- line_data[#line_data+1] = { line:match('([^:]+):(%d+):(%d+)') }
-- new code
local name, score1, score2 = line:match('([^:]+):(%d+):(%d+)')
line_data[name] = {score1, score2}
如果我没理解错的话,您将在重新读取文件后覆盖 line_data。所以我认为最好的方法是从读取函数本身获取数组并替换旧的。这是我的例子:
function ReadData(_path)
local tmp = {}
local file = io.open(_path, "r")
for line in file:lines() do
tmp[#tmp+1] = { line:match('([^:]+):(%d+):(%d+)') }
end
file:close()
return tmp
end
function Array2dAsStr(_array)
local function cutRight(_s, _i)
_i = _i or 1
return _s:sub(1, (_s:len())-1*_i)
end
local sOut = '{'
for _, v in pairs(_array) do
sOut = sOut..'{'
for _, v1 in pairs(v) do
sOut = sOut..v1..','
end
sOut = cutRight(sOut)..'},'
end
return cutRight(sOut)..'}'
end
line_data = ReadData("data.txt")
print(Array2dAsStr(line_data))
-- if you read again the file, the old stuff from line_data will overwritten
line_data = ReadData("data.txt")
print(Array2dAsStr(line_data))
我的 array2d 有问题。我实际上想要计划有刷新命令。
我在 data.txt
上的数据test1:30:1
test2:40:2
因此,每当我调用函数 ReadData 时。它会像这样发送到我的 Array2d:
line_data = {{"test1", "30", "1"},
{"test2", "40", "2"}}
但问题是我每次调用该函数。它总是会添加相同的数据,当我做一些活动时,我只想刷新或替换。 我的代码
line_data = {}
function ReadData()
local file = io.open("data.txt", "r")
for line in file:lines() do
line_data[#line_data+1] = { line:match('([^:]+):(%d+):(%d+)') }
end
end
也许你们可以帮我解决这个问题?
如果您想用新数据填充现有行,那么您需要一些 ID。如果该 id 只是名称,即字符串的第一部分,则更改将数据附加到数组的行:
-- old code
-- line_data[#line_data+1] = { line:match('([^:]+):(%d+):(%d+)') }
-- new code
local name, score1, score2 = line:match('([^:]+):(%d+):(%d+)')
line_data[name] = {score1, score2}
如果我没理解错的话,您将在重新读取文件后覆盖 line_data。所以我认为最好的方法是从读取函数本身获取数组并替换旧的。这是我的例子:
function ReadData(_path)
local tmp = {}
local file = io.open(_path, "r")
for line in file:lines() do
tmp[#tmp+1] = { line:match('([^:]+):(%d+):(%d+)') }
end
file:close()
return tmp
end
function Array2dAsStr(_array)
local function cutRight(_s, _i)
_i = _i or 1
return _s:sub(1, (_s:len())-1*_i)
end
local sOut = '{'
for _, v in pairs(_array) do
sOut = sOut..'{'
for _, v1 in pairs(v) do
sOut = sOut..v1..','
end
sOut = cutRight(sOut)..'},'
end
return cutRight(sOut)..'}'
end
line_data = ReadData("data.txt")
print(Array2dAsStr(line_data))
-- if you read again the file, the old stuff from line_data will overwritten
line_data = ReadData("data.txt")
print(Array2dAsStr(line_data))