使用这段脚本可以在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 : 优化代码结构