2009-07-24 9 views
0

私は奇妙な状況が少しあります。ハッシュを使用していた場合、この問題は簡単ですが、Rubyで「OpenStruct」を使用しようとしています。(Ruby)OpenStructsの文字列値を代入可能なプロパティに変換する...?

基本的に、私は戻り値を「定常化」する必要があると思います。私は充填のための有効なプロパティに「textopts」のための$ &をオンにする方法が必要

textopts = OpenStruct.new() 
    textopts.recipients = [] 
    fileparts = fhandle.read.split("<<-->>") 

    fileparts[0].chomp.each{|l| 
    if l =~ /Recipient.*/i 
     textopts.recipients << $& 
    elsif l =~ /(ServerAddress.*|EmailAddress.*)/i 
     textopts.$& = $&.split(":")[1] 
    end 
    } 

:私は正規表現を持っています。私は "一定化"といくつかの試みを試みましたが、何も動作しません。私はこれが可能だと思うだろうが、おそらく私は間違っている。明らかに私がハッシュを使用していたなら、私はちょうど "textopts [$ &] = ....."とすることができます。

アイデア?あなたのソリューションの構造を維持

答えて

2

が、これはそれを行うための一つの方法である:

textopts = OpenStruct.new(:recipients => []) 
    fileparts = fhandle.read.split('<<-->>') 

    fileparts.first.chomp.each_line do |l| 
    case l 
    when /Recipient.*/i 
     textopts.recipients << $& 
    when /(Server|Email)Address.*/i 
     textopts.send "#{$&}=", $&.split(':')[1] 
    end 
    end 

しかし、私は助けるが、これは適切なパーサであることを考えることはできません。

+0

ありがとうございました。 「適切なパーサ」を定義してください。私は基本的に、メールで少し微笑んでRubyのNET :: SMTPモジュール経由で送信しています。私はOptionParserを使ってコマンドライン項目を処理していますが、実際のテキストファイルを自分で読み込んでいます。私は、特定のパラメータがテキストファイルの先頭に存在することを期待しています。これらのいくつかの項目を手動で取得するだけです。残りの部分は実際には電子メール自体であり、送信されて送信されます。 –

関連する問題