Dies Aliquanti

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Rubyで.iniファイルを読む (6)

2009/6/29 さらに直しました 
まえにも、書いたんですが、ちょっと直しました。

ini = IniFile.new( "test.ini")

で、ハッシュのハッシュを返します。

ini[section][key]

でセクション、キーで値を参照できます。存在しない、ハッシュ、キーが指定されると""(ヌル文字列)が返ります。

また、

ini[section]

でセクション全体をハッシュとして返します。存在しないセクションを指定すれば、空のハッシュを返します。

iniファイルを書く方も作らなければなりませんね。ま、それはまた今度。


#
# (c)2009 BO
#
class IniFile < Hash
  @@ReComment = /^#/
  @@ReSection =/\[\s*(.*)\s*\]/
  @@ReKeyValue =/\s*(.*)\s*=\s*(.*)\s*/
  def initialize( fileSpec )
    @fileSpec = fileSpec
    File::open( fileSpec) {|f|
      sName = ""
      tmpHash = Hash::new
      tmpHash.default = ""
      while line = f.gets
        if line =~ @@ReComment
        elsif line =~ @@ReSection
          # closing previous section
          if sName != ""
            self[ sName ]= tmpHash
          end # if
          sName = $1.strip
          if ( tmpHash = self[ sName ] ) == nil
            tmpHash = Hash::new
            tmpHash.default = ""
          end
        elsif line =~ @@ReKeyValue
          tmpHash[ $1.strip  ] = $2.strip
        end
      end # while
      # closing final section
      if sName != ""
        self[ sName ]= tmpHash
      end # if
    }
    tmpHash = Hash::new
    tmpHash.default = ""
    self.default = tmpHash
    self
  end #def initialize( fileSpec )

  attr_reader :fileSpec
end # class IniFile

 



コメント

私も .ini を...

自分も、似たものを作ってました。Ruby 標準ライブラリの YAML と良く似たインターフェイスで .ini ファイルから読み込める、INI です:
<small> <a href=" http://yoshinoborin-diary.blogspot.com/2009/08/ini.html"" target="_blank">http://yoshinoborin-diary.blogspot.com/2009/08/ini.html" ; target="_blank"> http://yoshinoborin-diary.blogspot.com/2009/08/ini.html<" target="_blank">http://yoshinoborin-diary.blogspot.com/2009/08/ini.html< ;/a></small>

  • 2009/08/06(木) 23:21:00 |
  • URL |
  • よしのぼりん #79D/WHSg
  • [ 編集 ]

Re:私も .ini を...(05/06)

よしのぼりんさん、こんばんは。
YAMLなんて知りませんでした。勉強になります。
漢字は、-Ksとかで漢字コードを指定してもだめでしょうか?

  • 2009/08/08(土) 01:50:32 |
  • URL |
  • B.O #79D/WHSg
  • [ 編集 ]

Re[1]:私も .ini を...(05/06)

B.Oさん、こんばんは。
アドバイスありがとうございます。
漢字が使えないというのは、私がライブラリのテストに使ったYAMLのライブラリが日本語対応していなかっただけでした。お騒がせいたしました。
YAMLですが、とても便利です。いろいろな設定ファイルをYAMLフォーマットにしておけば、Rubyのコード数行で読み込み可能です。

  • 2009/08/14(金) 22:57:36 |
  • URL |
  • よしのぼりん #79D/WHSg
  • [ 編集 ]

Re[2]:私も .ini を...(05/06)

よしのぼりんさん、こんばんは。
>漢字が使えないというのは、私がライブラリのテストに使ったYAMLのライブラリが日本語対応していなかっただけでした。

なるほど…WindowsとLinuxと両方使っていると、「日本語」は相変わらず頭痛いですね。
YAML、私も勉強してみます。

  • 2009/08/16(日) 18:09:43 |
  • URL |
  • B.O #79D/WHSg
  • [ 編集 ]

Re:Rubyで.iniファイルを読む(05/06)

「ruby iniファイル」で検索するとこちらにたどり着いたので、iniファイルの処理にありがたく使わせていただきました。値そのものに=(イコール)が含まれる場合があるので正規表現の一部を最短一致に変更して使っています。
@@ReKeyValue =/\s*?(.*?)\s*?=\s*(.*)\s*/

  • 2009/09/12(土) 23:01:14 |
  • URL |
  • ひっぱりだこ #79D/WHSg
  • [ 編集 ]

Re[1]:Rubyで.iniファイルを読む(05/06)

ひっぱりだこさん、こんばんわ
>「値そのものに=(イコール)が含まれる場合
>があるので正規表現の一部を最短一致に変更して..
なる程、確かにそうですね。そのうちメンテします。
ご指摘、ありがとうございます。

  • 2009/09/14(月) 00:20:31 |
  • URL |
  • B.O #79D/WHSg
  • [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://diesaliquanti.blog.fc2.com/tb.php/633-fc449653
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

まとめ

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。