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