使用这段脚本可以在RGSS中比较快捷地读取、写入ini文件中的值。需要转码模块才能正常处理中文等字符。
INI = IniFile.new(".\\Game.ini")
p INI[:Game][:Title] #获取游戏标题,缓冲区大小默认为128
p INI[:Game][:Title2] #读取一个不存在的键,则返回空字符串
INI.default = "NONE" #若读取的键不存在则返回"NONE"
INI.buffer_size = 256 #指定缓冲区大小为256
INI[:Game][:Title] = "测试工程" #写入键值
#==============================================================================
# ■ IniFile
#------------------------------------------------------------------------------
# 提供简单的INI文件读写功能。依赖于转码模块。
#------------------------------------------------------------------------------
# 作者:失落的乐章
# 来源:https://www.s-gs.net/ini_script
#==============================================================================
class IniFile
WriteString = Win32API.new('kernel32', 'WritePrivateProfileString', 'pppp', 'l')
GetString = Win32API.new('kernel32', 'GetPrivateProfileString', 'pppplp', 'l')
attr_accessor :default, :buffer_size
def initialize(file)
@file = file
@default = ""
@buffer_size = 128
end
def [](app)
IniKey.new(@file, app.to_s, @default, @buffer_size)
end
class IniKey
def initialize(file, app, default, size)
@file, @app, @default, @size = file, app, default, size
end
def [](key)
buf = "\0" * @size
GetString.call(@app.u2s, key.to_s.u2s, @default, buf, @size, @file)
return buf.delete("\0").s2u
end
def []=(key, value)
WriteString.call(@app.u2s, key.to_s.u2s, value.to_s.u2s, @file)
end
end
end
版本历史: 2016.08.16 : 初版 2016.09.15 : 优化代码;增加对编码问题的处理 2016.10.14 : 优化代码结构