我有一个Ini文件,我使用IniFile来帮助解析它。
我想在ini文件的顶部添加一个新的section
,我该怎么做?
sample.ini
[Student1]
A = 1
[Student2]
B = 1
我的预期结果,
[Summary]
NumOfStudents=2
[Student1]
A = 1
[Student2]
B = 1
问题:Summary
部分始终插在底部。
[Student1]
A = 1
[Student2]
B = 1
[Summary]
NumOfStudents=2
我的Ruby脚本
iniFileHandle = IniFile.load(sample.ini)
numOfStudents = iniFileHandle.sections.size
iniFileHandle['Summary'] = {'NumOfStudents' => numOfStudents}
附加 Ruby IniFile 2.0.2 Doc 从文档中,我找不到任何在顶部插入部分的函数。
答案 0 :(得分:4)
这个gem的代码非常简单,它是only one file。
现在似乎不可能。如果需要,您可以实现此功能。在他的代码中,基本上他保留了一个部分名称和一个带有该部分变量的哈希。 []=
方法的作用是使用其[]=
方法向哈希添加新变量。由于红宝石1.9红宝石的哈希是有序的,但这种方法增加了它的尾部。添加到哈希前面的方法如下:
{front_key: "Front value"}.merge(original_hash)
快乐的黑客攻击。
答案 1 :(得分:1)
1)为什么ini文件中各节的顺序相关?
2) my_prog.rb:
require 'inifile'
ini_file = IniFile.load("sample.ini")
numOfStudents = ini_file.sections.size
h = {
"Summary" => { "NumOfStudents" => numOfStudents }
}
ini_file.instance_eval do
p @ini #instance_eval() changes self to ini_file, and
h.merge! @ini #all instance variables are looked up in whatever
@ini = h #object is self. If you look at the inifile gem's source
end #code, the sections of the ini file are stored in a
#hash called @ini
ini_file.write
--output:--
$ cat sample.ini
[Student1]
A = 1
[Student2]
B = 1
~/ruby_programs$ ruby my_prog.rb
{"Student1"=>{"A"=>"1"}, "Student2"=>{"B"=>"1"}}
~/ruby_programs$ cat sample.ini
[Summary]
NumOfStudents = 2
[Student1]
A = 1
[Student2]
B = 1
3)或者你可以这样做:
require 'inifile'
class IniFile
attr_accessor :ini
end
ini_file = IniFile.load("sample.ini")
numOfStudents = ini_file.sections.size
h = {
"Summary" => { "NumOfStudents" => numOfStudents }
}
results = h.merge! ini_file.ini
ini_file.ini = results
ini_file.write