Project1

标题: 自定义并读取Game.ini文件 [打印本页]

作者: bbschat    时间: 2007-12-22 09:28
标题: 自定义并读取Game.ini文件
正好最近工作中要用,上网查了一下相关资料,觉得都不合用,就自己动手写了个比较简单的。

就拿RMXP的Game.ini文件做示范吧。

  1. f = File.open(Dir.getwd << '\Game.ini')
  2. $ini_hash = {}

  3. f.each {|line|
  4. line.gsub!(/\n/,"")
  5. k,v = line.split(/=/)
  6. $ini_hash[k] = v if v !=nil
  7. }


  8. p "Library的值是" + $ini_hash["Library"].to_s
  9. p "Scripts的值是" + $ini_hash["Scripts"].to_s
  10. p "Title的值是" + $ini_hash["Title"].to_s
  11. p "RTP1的值是" + $ini_hash["RTP1"].to_s
  12. p "RTP2的值是" + $ini_hash["RTP2"].to_s
  13. p "RTP3的值是" + $ini_hash["RTP3"].to_s
  14. p "OtherThing1的值是" + $ini_hash["OtherThing1"].to_s
  15. p "OtherThing2的值是" + $ini_hash["OtherThing2"].to_s

复制代码


以下是Game,ini的内容
[Game]
Library=RGSS102J.dll
Scripts=Data\Scripts.rxdata
Title=Project1
RTP1=Standard
RTP2=
RTP3=
OtherThing1=1234
OtherThing2=abcde

代码很短,符合Ruby的风格。

需要补充的几点:

1,整个ini文件的内容读入一个hash表,也就是$ini_hash这个全局变量。调用时使用$ini_hash[key]。加上 .to_s 是为了防止没有该键或该键没有赋值的情况。

2,程序虽然读入了[Game]这个东西,但并没有进行处理,个人觉得一般自己用的ini没必要再分层,一层够用了。多层的话调用起来也麻烦。

3,注意这句话:$ini_hash[k] = v if v !=nil 。如果没有给键赋值(比如上面的RTP2和RTP3),那么不写进$ini_hash,主要是为了节省空间。当然不满意也可以把 if v !=nil 去掉。不过,相信总会有乱改 ini 的情况出现。^ -^

作者: bbschat    时间: 2007-12-22 09:28
标题: 自定义并读取Game.ini文件
正好最近工作中要用,上网查了一下相关资料,觉得都不合用,就自己动手写了个比较简单的。

就拿RMXP的Game.ini文件做示范吧。

  1. f = File.open(Dir.getwd << '\Game.ini')
  2. $ini_hash = {}

  3. f.each {|line|
  4. line.gsub!(/\n/,"")
  5. k,v = line.split(/=/)
  6. $ini_hash[k] = v if v !=nil
  7. }


  8. p "Library的值是" + $ini_hash["Library"].to_s
  9. p "Scripts的值是" + $ini_hash["Scripts"].to_s
  10. p "Title的值是" + $ini_hash["Title"].to_s
  11. p "RTP1的值是" + $ini_hash["RTP1"].to_s
  12. p "RTP2的值是" + $ini_hash["RTP2"].to_s
  13. p "RTP3的值是" + $ini_hash["RTP3"].to_s
  14. p "OtherThing1的值是" + $ini_hash["OtherThing1"].to_s
  15. p "OtherThing2的值是" + $ini_hash["OtherThing2"].to_s

复制代码


以下是Game,ini的内容
[Game]
Library=RGSS102J.dll
Scripts=Data\Scripts.rxdata
Title=Project1
RTP1=Standard
RTP2=
RTP3=
OtherThing1=1234
OtherThing2=abcde

代码很短,符合Ruby的风格。

需要补充的几点:

1,整个ini文件的内容读入一个hash表,也就是$ini_hash这个全局变量。调用时使用$ini_hash[key]。加上 .to_s 是为了防止没有该键或该键没有赋值的情况。

2,程序虽然读入了[Game]这个东西,但并没有进行处理,个人觉得一般自己用的ini没必要再分层,一层够用了。多层的话调用起来也麻烦。

3,注意这句话:$ini_hash[k] = v if v !=nil 。如果没有给键赋值(比如上面的RTP2和RTP3),那么不写进$ini_hash,主要是为了节省空间。当然不满意也可以把 if v !=nil 去掉。不过,相信总会有乱改 ini 的情况出现。^ -^

作者: orochi2k    时间: 2007-12-22 09:34
[看不见偶~看不见偶]
#这里是不厚道的比较详细注释
f = File.open(Dir.getwd << '\Game.ini') #这里是打开文件GAME.INI
$ini_hash = {}                          #这里是建立哈希表

f.each {|line|                        #这里开始叠代(整个大括号里都是)
line.gsub!(/\n/,"")                   #这里是传说中的每行之间以换行符割开
k,v = line.split(/=/)                 #这里是每行之中用等于号前后分成两段存在K和V里
$ini_hash[k] = v if v !=nil           #这里是将哈希组的第K个的值变成V,如果V不是空
}
#总结....其实66大的那个英语背单词软件的IO写得差不多....
[/看不见偶~看不见偶]

我晕...刚发完帖,发现老大把帖加了1VIP限制 -_-0
作者: bbschat    时间: 2007-12-22 09:38
line.gsub!(/\n/,"")                   #这里是传说中的每行之间以换行符割开


这个是把换行符删掉。{/hx}
作者: orochi2k    时间: 2007-12-22 09:39
汗....看漏行看到split那里去了{/gg}

不过话说RUBY里带感叹号的方法都非常的强大-_-0
(被众人发现故意扯开话题,自己PIA飞,{/tp})
作者: Eclair    时间: 2008-1-26 03:50
提示: 作者被禁止或删除 内容自动屏蔽




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1