Lua - 分析文本文件中的数值
2021-10-15 8:21:28
收藏:0
阅读:190
评论:2
我正在将功率(瓦特)数值写入文本文件,以便提取我可以使用的信息。
4.7
4.7
4.8
5.2
5.1
4.6
4.6
4.6
目前,我有以下代码可以给我平均值,但我想添加一些信息,例如最高值,最低值,最常见值,如果可能的话,记录有任何‘0’值(* - 如果可能的话,忽略它们..)
local ctr = 0
local sum = 0
for _ in io.lines"/www/EnergyPlug-b.txt" do
ctr = ctr + 1
end
print(ctr)
for line in io.lines"/www/EnergyPlug-b.txt" do
sum = sum + line
end
print(sum)
average = sum / ctr
print(average)
我尝试使用第一个io.lines
部分通过table.insert()
创建一个Lua表,如下所示,但我不确定它有多好?
local rows = {}
-- 逐行扫描文件
for line in io.lines("/www/EnergyPlug-b.txt") do
-- 如果行匹配 ?.?,则插入表中
local value = line:match("%d%p%d")-- 1.5
--print(value)
table.insert(rows,value)
end
local arraymax = math.max(unpack(rows))
local arraymin = math.min(unpack(rows))
print(arraymax) - ?.?
print(arraymin) - ?.?
如果上面的代码适用,请问我应该如何最好地确定我所提到的项目/值?
原文链接 https://stackoverflow.com/questions/69581701
点赞
stackoverflow用户6676439
感谢 @piglet 和其他 SO 帖子的帮助,这是我最后得出的代码:
local min = math.huge -- 使用绝对大于任何值的值
local max = -math.huge -- 使用绝对小于任何值的值
local ctr = 0
local valtotal = 0
local counts = {} -- 我们将用一个空表来计算每个值出现的次数
local numIngored = 0 -- 我们忽略了多少个值为 0 的值?
for line in io.lines("/www/EnergyPlug-b.txt") do
-- 将字符串转换为数字
local value = tonumber(line)
-- 如果我们将值考虑在内
if value ~= 0.0 then
ctr = ctr + 1
valtotal = valtotal + value
-- 更新 min 和 max 值
min = value < min and value or min
max = value > max and value or max
-- 更新计数器
counts[value] = counts[value] and counts[value] + 1 or 1
else
-- 计算被忽略的值
numIgnored = numIgnored + 1
end
end
print("----表打印输出-----")
for k, v in pairs(counts) do
print(k,v)
end
print("---------------------------")
print("记录的最低值 = " ..min)
print("记录的最高值 = " ..max)
print("记录的平均值 = " ..round2(valtotal / ctr, 1))
print("记录的值的数量 = " ..ctr)
print("---------------------------")
local max_val, key1 = -math.huge
for k, v in pairs(counts) do
if v > max_val then
max_val, key1 = v, k
end
end
local min_val, key2 = math.huge
for k1, v1 in pairs(counts) do
if v1 < min_val or v1 == min_val then
min_val, key2 = v1, k1
end
end
local min_qty, max_qty = 0, 0
local min_str, max_str = "", ""
for k2, v2 in pairs(counts) do
if v2 == min_val then
min_qty = min_qty + 1
min_str = min_str .. " " .. k2
elseif v2 == max_val then
max_qty = max_qty + 1
max_str = max_str .. " " .. k2
end
end
if min_qty == 1 then
print("最少记录的值为 = " ..key2.. ",记录了 "..min_val.." 次")
else
print("最少记录的值有 = " ..min_str.. ",分别记录了 "..min_val.." 次")
end
if max_qty == 1 then
print("最多记录的值为 = " ..key1.. ",记录了 "..max_val.." 次")
else
print("最多记录的值有 = " ..max_str.. ",分别记录了 "..max_val.." 次")
end
print("---------------------------")
2021-10-19 09:15:43
评论区的留言会收到邮件通知哦~
推荐文章
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
在第一个代码片段中,没有必要为 ctr 和 sum 分别设置一个循环。你可以在一个循环中完成它。
你的第二个片段没问题。
unpack
是有限制的,所以这对于很多千个值不起作用。您必须遍历表格以获取其他值,因此您也可以在该循环中确定 min 和 max,而无需考虑该大小限制。
如果该文件中仅包含那些数字,那么
local value = line:match("%d%p%d")
这里可以跳过模式匹配。这些计算相当简单。我不确定您在这里有什么困难。
local min = math.huge --使用一个肯定比任何值都大的值 local max = -math.huge --使用一个肯定比任何值都小的值 local counts = {} --一个空表,我们将用它来计算每个值出现的频率 local numIngored = 0 --我们忽略了多少个0值? for line in io.lines(yourFileName) do --将字符串转换为数字 local value = tonumber(line) --如果我们考虑该值 if value ~= 0.0 then --更新最小值和最大值 min = value < min and value or min max = value > max and value or max --更新计数 counts[value] = counts[value] and counts[value] + 1 or 1 else --计数被忽略的值 numIgnored = numIgnored + 1 end end
我将留给您从
counts
中获取最频繁值的方法。