【问题标题】:Lua script - collection data and save into a fileLua 脚本 - 收集数据并保存到文件中
【发布时间】:2013-04-19 09:32:58
【问题描述】:

我正在编写 lua 脚本。

我正在编码的是..收集数据并将其保存到某个文件中。

情况 :
有两个传感器,当它们识别到前面的物体时,传感器的值会增加。
我想随时间每 100 毫秒保存一次传感器值的数据。
时间格式为“2013-04-25 10:30:004”

我所做的是在这里。

===========================================================

require("TIMER")
require("TIMESTAMP")
require("ANALOG_IN")

function OnExit()
    print("Exit code...do something")
end

function main()

    timer = "TIMER"
    analogsensor_1 = "AIR_1"
    analogsensor_2 = "AIR_2"

    while true do 
        valueOfSensor_1 = ANALOG_IN.readAnalogIn(analogsensor_1);
        valueOfSensor_2 = ANALOG_IN.readAnalogIn(analogsensor_2);

        write(colltection_of_data.txt)
        go(print(valueOfSensor_1), 0.1)     //print value of sensor every 100ms
        print(time)
        go(print(valueOfSensor_2), 0.1)
        print(time)
    end 
    TIMER.sleep(timer,500)

end 

print("start main")
main()

================================================================

我知道这不是完整的代码。如何将数据保存到某个文件中? 以及如何显示这样的时间格式?

提前谢谢你!

【问题讨论】:

    标签: lua


    【解决方案1】:

    抱歉,没有小数秒

    -- Open file
    local file = assert(io.open('collection_of_data.txt','wb'))
    
    -- Write to file
    local dt = os.date'*t'
    local time_string = 
       dt.year..'-'..('0'..dt.month):sub(-2)..'-'..('0'..dt.day):sub(-2)..' '..
       ('0'..dt.hour):sub(-2)..':'..('0'..dt.min):sub(-2)..':'..('0'..dt.sec):sub(-2)
    file:write(valueOfSensor_1, '\n', time_string, '\n')
    
    -- Close file
    file:close()
    

    【讨论】:

    • @junghur 表示打开文件写入二进制数据。见lua.org/pil/21.2.html
    • @junghur 它是二进制模式的写访问。请参阅我的答案中的手册链接。此外,格式化可以更容易地完成。
    • 我可以用"local timestr = os.date("%Y-%m-%d %H:%M:%S")"代替你的time_string吗?
    • 还有一个问题!!如果我说文件“collection_of_data.txt”的名称并保存在系统(linux)中,这段代码是否会自动找到该文件并将其保存到文件中?
    【解决方案2】:

    要获取您致电的日期和时间:

    local timestr = os.date("%Y-%m-%d %H:%M:%S")

    现在要将其保存到您需要打开文件的文件中

    local filehandle = io.open(filename[, mode]) - Manual

    要输出所需的数据,然后使用

    local filehandle = io.open("Log.txt", "w+")
    filehandle:write(timestr, " - Sensor1: ", tostring(valueOfSensor1), "\n")
    

    当然,您只打开一次文件,然后每 x (milli) 秒发出一次写入命令。完成后:

    filehandle:close()

    附:请尽可能使用当地人。它比全局变量快得多(local analogSensor_1 而不仅仅是 analogSensor_1

    【讨论】:

    • @junghur 这是打开文件的通用语法。例如io.open("Test.txt", "w+b") 将以二进制模式打开具有写入附加访问权限的 Text.txt 文件。请参阅我提供的手册链接。
    • 压缩日期格式!不幸的是,%F %T 不起作用。
    • 还有一个问题!!如果我说文件“collection_of_data.txt”的名称并保存在系统(linux)中,这段代码是否会自动找到该文件并将其保存到文件中?
    • @EgorSkriptunoff,是的,%F 使我的 lua 解释器崩溃了 :)
    • local filehandle = io.open(filename[, mode]) 和 local filehandle = io.open("Log.txt", "w+") 有什么区别?我需要这样写两次吗?
    猜你喜欢
    • 2023-03-26
    • 1970-01-01
    • 2022-07-12
    • 2020-12-26
    • 1970-01-01
    • 2022-01-09
    • 2016-06-18
    • 1970-01-01
    • 2012-06-04
    相关资源
    最近更新 更多