如何插入';第'节;通过Ruby在文件的顶部

如何插入';第'节;通过Ruby在文件的顶部,ruby,ini,Ruby,Ini,我有一个Ini文件,我正在使用它来帮助解析它。 我想在ini文件的顶部添加一个新的部分,我该怎么做 sample.ini [Student1] A = 1 [Student2] B = 1 我的预期结果, [Summary] NumOfStudents=2 [Student1] A = 1 [Student2] B = 1 问题:摘要部分始终插入底部 [Student1] A = 1 [Student2] B = 1 [Summary] NumOfStudents=2 我

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


sample.ini

[Student1]
A = 1

[Student2]
B = 1

我的预期结果,

[Summary]
NumOfStudents=2

[Student1]
A = 1

[Student2]
B = 1

问题:
摘要
部分始终插入底部

[Student1]
A = 1

[Student2]
B = 1

[Summary]
NumOfStudents=2

我的Ruby脚本

iniFileHandle = IniFile.load(sample.ini)
numOfStudents = iniFileHandle.sections.size

iniFileHandle['Summary'] = {'NumOfStudents' => numOfStudents}

附加的
从文档中,我找不到任何在顶部插入节的函数。

这个gem的代码非常简单,非常简单

现在看来不可能。如果需要,可以实现此功能。在他的代码中,他基本上保留了一个节名和一个包含该节上变量的哈希。
[]=
方法所做的是使用其
[]=
方法向散列添加一个新变量。由于Ruby1.9Ruby哈希是有序的,但是这个方法在它的尾部添加了一些内容。在哈希前面添加的方法如下所示:

 {front_key: "Front value"}.merge(original_hash)
愉快的黑客行为。

1)为什么ini文件中各节的顺序相关

(二) 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

谢谢我明白你的意思了,让我稍后再做,因为我刚学了一天ruby。投票表决你的想法。当然,你也可以只写
类文件;属性存取器:ini;结束
,然后您可以将@ini更改为您的心形内容——我已将其添加到我的答案中。已标记(&up)已投票。对于第一个问题,ini文件可能会手动打开以了解有多少学生。如果
摘要
部分始终位于底部,则不方便。而
StudentXX
部分已经指出了有多少学生,因此,将其放在底部是没有意义的。我认为ini文件不应该用于随意查看或提供摘要信息。它们应该用于初始化程序运行所需的一些配置。是的,大多数情况下我们不会直接打开它,只是在我遇到的少数情况下。