私は Ruby について調べ始め、何かを構築しようと考えました。その中に簡単な構成ファイルパーサーを書き始めました。単純な原則は、適切にフォーマットされたファイルをフィードすると、設定のハッシュが吐き出されるということです。たとえば、これは構成ファイルです。
localhost: 4000;
auto: true;
これが返されるものです:
{"localhost" => "4000", "auto" => "true"}
これで、次のコードを直接入力すると動作するようになりました。
def spit_direct(input = "", *args)
spat = Hash.new
args.each do |arg|
if input.include? arg
strip = input.match(/#{arg}:\s(\w*);/)
spat[arg] = strip[1]
else
# error message
break
end
end
spat
end
spit_direct("localhost: 4000; auto: true;", "localhost", "auto")
# => {"localhost"=>"4000", "auto"=>"true"}
これは私が望むように機能しますが、実際のファイルをフィードできる方がよいでしょう。次のコードを思いつきましたが、最初の設定のみを返し、2 番目の設定は返さないようです。
def spit_file(input = "", *args)
spat = Hash.new
args.each do |arg|
File.open(input).each_line do |line|
if line.include? arg
strip = line.match(/#{arg}:\s(\w*);/)
spat[arg] = strip[1]
else
# error message
break
end
end
end
spat
end
config.cnfg
上記のいくつかの設定ファイルと同じ内容で呼び出されるファイルをフィードすると、次のようになります。
spit_file("(path)/config.cnfg", "localhost", "auto")
以下のみを返します。
# => {"localhost"=>"4000"}
何故ですか?昨夜、数時間費やしましたが、何が問題なのかわかりません。