如何通过Ruby在IniFile的顶部插入“部分”

时间:2013-09-06 03:15:15

标签: ruby ini

我有一个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 从文档中,我找不到任何在顶部插入部分的函数。

2 个答案:

答案 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