2

我有一个 Ini 文件,我正在使用IniFile来帮助解析它。我想section在ini文件的顶部添加一个新的,我该怎么做?


示例.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}

Additional Ruby IniFile 2.0.2 Doc 从文档中,我没有找到在顶部插入部分的任何函数。

4

2 回答 2

4

这个gem的代码很简单,只有一个文件

目前看来是不可能的。如果需要,您可以实现此功能。在他的代码中,基本上他保留了一个部分名称和一个包含该部分变量的哈希值。该[]=方法的作用是使用其方法向散列添加一个新变量[]=。由于 ruby​​ 1.9 ruby​​ 哈希是有序的,但是这个方法在它的尾部添加了。在哈希前面添加的一种方法如下:

 {front_key: "Front value"}.merge(original_hash)

快乐的黑客。

于 2013-09-06T03:29:10.350 回答
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
于 2013-09-06T04:50:24.957 回答