Как не сложно догадаться из названия, скрипт предназначен для работы с INI-файлами. Прежде всего, это была тренировка для меня в обращении со строковыми правилами, так что возможны глюки, хотя я и постарался все как следует протестировать. Что же касается практического применения: можно вывести в окошко название игры, используемую библиотеку скриптов... а можно подгрузить свои собственные базы данных, если, скажем, вы решили добавить предметам Вес, а поля в интерфейсе мейкера для этого не оказалось. Естественно все это будет на виду и редактируемо простым виндосовским блокнотом, однако, с появлением чудо-анпакера, любой проект на XP или VX открыт для всеобщего обозрения... "И клянусь всеми развалинами нашего несчастного Гипата, меня это ничуть не печалит!"(с)
#===============================================================================
# IniFile v1.0
# Created by: Equilibrium Keeper [ICQ: 470355387]
# Created on: 13.04.09 21:11:48
#===============================================================================
class IniFile
#-----------------------------------------------------------------------------
# Инициализация
# filename :string - полный путь к файлу, относительно папки проекта
#-----------------------------------------------------------------------------
def initialize(filename)
@table = {}; head = ""; param = ""; value = "";
File.open(filename).each{|row|
row.gsub!(/\A(\s*)|(\s*)\Z/){""}
is_head = row[/\[[a-zA-Zа-яА-Я0-9]+\]/] ? true : false
if is_head
head = row
next
end
row.scan(/\A([a-zA-Zа-яА-Я0-9]+)=(.*)\Z/){ |s|
param = $1; value = $2
}
@table["#{head}, #{param}"] = value
}
end
#-----------------------------------------------------------------------------
# Возвращает значение параметра в секции
# head :string - имя секции без скобок
# param :string - имя параметра
# пример: self["Game", "Title"]
#-----------------------------------------------------------------------------
def [](head, param)
return @table["[#{head}], #{param}"]
end
#-----------------------------------------------------------------------------
# Задает значение параметра в секции
# head :string - имя секции без скобок
# param :string - имя параметра
# value :string - новое значение параметра
# пример: self["Game", "Title"] = "My First Game With Custom INI-bases"
# Внимание!!! Метод пока не записывает данные в сами INI-файлы!
# Результаты действия сохранятся только в пределах данного объекта.
#-----------------------------------------------------------------------------
def []=(head, param, value)
@table["[#{head}], #{param}"] = value
# Инициируем запись в файл
end
#-----------------------------------------------------------------------------
end