自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

使用 Lua 解析配置文件

系統(tǒng) Linux
本文將討論一些利用 Lua 進(jìn)行持久化配置的方法。

使用 Lua 配置持久化應(yīng)用設(shè)置。

不是所有的應(yīng)用都需要配置文件;對很多應(yīng)用來說,在啟動時變得煥然一新對它們更有利。例如,簡單的工具就極少需要偏好項和設(shè)置在使用過程中保持穩(wěn)定不變。然而,當(dāng)你編寫一個復(fù)雜的應(yīng)用程序時,如果能讓用戶設(shè)置與應(yīng)用的交互方式,以及應(yīng)用與系統(tǒng)交互的方式會很不錯。這就是配置文件用來做的事情。本文將討論一些利用 Lua 進(jìn)行持久化配置的方法。

選擇一種格式

關(guān)于配置文件很重要的兩點是一致性和可預(yù)見性。你不會希望為了保存用戶偏好項,將信息轉(zhuǎn)儲到文件中,然后再花幾天去編碼實現(xiàn)“逆向工程”,處理最后出現(xiàn)在文件里的隨機(jī)信息。

這里用一些常用的 ??配置文件格式??。Lua 有一些庫可以處理大多數(shù)常用的配置格式;在本文中,我會采用 INI 格式。

安裝庫

Lua 庫的核心倉庫是 ??Luarocks.org??。你可以在這個網(wǎng)站搜索庫,或者你可以安裝并使用 ??luarocks?? 終端命令。

Linux 環(huán)境中,你可以從發(fā)行版的軟件倉庫中下載它,例如:

$ sudo dnf install luarocks

在 macOS 上,請使用 ??MacPorts?? 或者 ??Homebrew??。在 Windows 上,請使用 ??Chocolatey??。

??luarocks?? 安裝后,你可以使用 ??search?? 子命令來搜索一個恰當(dāng)?shù)膸臁H绻悴恢缼斓拿?,可以通過關(guān)鍵詞來搜索這個庫,例如 ??ini??、xml??或者??json??,這取決于你想要用這個庫做什么。打個比方,你可以搜索??inifile`, 這個庫被我用來解析 INI 格式的文本文件。

$ luarocks search inifileSearch results:inifile 1.0-2 (rockspec) - https://luarocks.org 1.0-2 (src) - https://luarocks.org 1.0-1 (rockspec) - https://luarocks.org [...]

一個開發(fā)者容易犯的錯誤是在系統(tǒng)上安裝了這個庫卻忘了把它和應(yīng)用打包。這會給沒有安裝這個庫的用戶帶來麻煩。為了防止這個問題發(fā)生,可以使用 ??--tree?? 選項將它安裝在項目的本地文件夾中。如果你沒有這個項目文件夾,那就先創(chuàng)建這個文件夾再安裝庫:

$ mkdir demo$ cd demo$ luarocks install --tree=local inifile

??--tree?? 選項指示 ??luarocks?? 創(chuàng)建一個新文件夾并在其中安裝你的庫,例如這個例子中的 ??local?? 文件夾。 使用這個簡單的技巧,你可以將所有你項目要使用的依賴項直接安裝到項目文件夾中。

配置代碼

首先,在一個名 ??myconfig.ini?? 的文件中創(chuàng)建一些 INI 數(shù)據(jù)。

[example]name=Tuxspecies=penguinenabled=false[demo]name=Beastiespecies=demonenabled=false

將這個文件保存到你的主目錄下,命名為 ??myconfig.ini??, 不要 存到項目文件夾下。你通常會希望配置文件獨立于你的文件存在,這樣當(dāng)用戶卸載你的應(yīng)用時,使用應(yīng)用時產(chǎn)生的數(shù)據(jù)可以保存在系統(tǒng)中。有些用戶會刪除不重要的配置文件,但大多數(shù)不會。最終,如果他們要重裝這個應(yīng)用,還會保留著所有的用戶偏好項。

配置文件的位置以技術(shù)來說并不重要,但每一個操作系統(tǒng)都有存儲它們的特定或者默認(rèn)的路徑。在 Linux 中,這個路徑由 ??Freedesktop 規(guī)范?? 指定。它規(guī)定配置文件被保存在一個名為 ??~/.config?? 的隱藏文件夾中。為了操作時更加清晰明確,可以在主目錄下存儲配置文件,以便于使用和尋找。

創(chuàng)建第二個文件,命名為 ??main.lua??,并在你喜歡的文本編輯器中打開它。

首先,你必須告訴 Lua 你將想要使用的附加庫放置在哪里。??package.path?? 變量決定了 Lua 到哪里去尋找這些庫。你可以從終端中查看 Lua 默認(rèn)的包地址:

$ Lua> print(package.path)./?.lua;/usr/share/lua/5.3/?.lua;/usr/share/lua/5.3/?/init.lua;/usr/lib64/lua/5.3/?.lua;/usr/lib64/lua/5.3/?/init.lua

在你的 Lua 代碼中,將你本地庫的路徑添加到 ??package.path?? 中:

package.path = package.path .. ';local/share/lua/5.3/?.lua

使用 Lua 解析 INI 文件

當(dāng)包的位置確定以后,下一件事就是引入 ??inifile?? 庫并處理一些操作系統(tǒng)邏輯。即使這是一個很簡單的應(yīng)用,代碼也需要從操作系統(tǒng)獲取到用戶主目錄的路徑,并建立在必要時將文件系統(tǒng)路徑返回給操作系統(tǒng)的通信方式。

package.path = package.path .. ';local/share/lua/5.3/?.luainifile = require('inifile')-- find home directoryhome = os.getenv('HOME')-- detect path separator-- returns '/' for Linux and Mac-- and '\' for Windowsd = package.config:sub(1,1)

現(xiàn)在你可使用 ??inifile?? 來從配置文件解析數(shù)據(jù)到 Lua 表中。一旦這些數(shù)據(jù)被導(dǎo)入進(jìn)表中,你可以像查詢其他的 Lua 表一樣查詢它。

-- parse the INI file and-- put values into a table called confconf = inifile.parse(home .. d .. 'myconfig.ini')-- print the data for reviewprint(conf['example']['name'])print(conf['example']['species'])print(conf['example']['enabled'])

在終端中運行代碼可以看見結(jié)果:

$ lua ./main.luaTuxpenguinfalse

這看起來是正確的。試試在 ??demo?? 塊中執(zhí)行同樣的操作。

使用 INI 格式存儲數(shù)據(jù)

不是所有用來解析的庫都會讀寫數(shù)據(jù)(通常被稱為 _編碼 和 解碼),但是 ??inifile?? 會這樣做。這意味著你可以使用它對配置文件進(jìn)行修改。

為了改變配置文件中的值,你可以對被解析的表中的變量進(jìn)行設(shè)置,然后把表重寫回配置文件中。

-- set enabled to trueconf['example']['enabled'] = trueconf['demo']['enabled'] = true-- save the changeinifile.save(home .. d .. 'myconfig.ini', conf)

現(xiàn)在再來看看配置文件:

$ cat ~/myconfig.ini[example]name=Tuxspecies=penguinenabled=true[demo]name=Beastiespecies=demonenabled=true

配置文件

按照用戶的設(shè)想來存儲數(shù)據(jù)對程序來說是至關(guān)重要的。幸運的是,這對工程師來說是一個很常規(guī)的任務(wù),大多數(shù)工作可能早已被完成了。只要找到一個好用的庫完成開放格式下編碼和解碼,你就能為用戶提供一致且持續(xù)的體驗。

以下是完整的演示代碼,可供參考。

package.path = package.path .. ';local/share/lua/5.3/?.lua'inifile = require('inifile')-- find home directoryhome = os.getenv('HOME')-- detect path separator-- returns '/' for Linux and Mac-- and '\' for Windowsd = package.config:sub(1,1)-- parse the INI file and-- put values into a table called confconf = inifile.parse(home .. d .. 'myconfig.ini')-- print the data for reviewprint(conf['example']['name'])print(conf['example']['species'])print(conf['example']['enabled'])-- enable Tuxconf['example']['enabled'] = true-- save the changeinifile.save(home .. d .. 'myconfig.ini', conf)
責(zé)任編輯:龐桂玉 來源: Linux中國
相關(guān)推薦

2021-07-05 12:09:58

Python編程語言

2010-02-03 09:19:31

Python模塊

2011-03-28 09:07:26

Nagios配置文件

2010-02-22 10:18:18

WCF配置文件

2021-07-13 05:47:40

GroovyJSON軟件開發(fā)

2010-12-27 14:59:31

Outlook 配置文

2011-08-29 16:48:50

Lua配置文件C++

2009-12-21 11:19:50

WCF配置文件

2010-03-18 18:17:01

Python 配置文件

2011-09-08 16:07:13

Widget配置文件

2009-11-05 10:30:41

WCF Address

2021-07-08 21:19:04

BashLinux

2020-10-20 10:12:00

Windows

2019-11-22 10:00:53

ICC配置文件Windows 10

2009-06-08 16:44:00

Struts配置文件

2011-01-13 16:27:26

Linux配置文件

2011-01-19 14:00:21

2010-12-28 16:35:32

Outlook 配置文

2010-02-02 18:19:52

Linux mplay

2010-03-19 11:18:07

Python讀寫配置文
點贊
收藏

51CTO技術(shù)棧公眾號