Dies Aliquanti

スポンサーサイト

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

iEPGデジタルクラス関連multi形式の続き RubyでPVRを作ろう!その8

とりあえず、無事アメリカまで来ました。
multi形式の読み込み用のクラスメソッド IEPG.File2Array()ですが、バグではないけど、処理が重複していたのと、redoとか使っていて、何をやっているのかが自分でもよくわからない(大笑)感じ。そこで、single形式のときと同じように、各行ごとの配列からパースするようにちょっと変えてみました。こうすることで、Boundaryの文字列に挟まれたところを、single形式専用の関数でパースするのを繰り返すようにでき、関数も短くできました。成田エキスプレスのなかで、ちょろっと直しましたが、問題なようです。
 
  def IEPG.File2Array( filespec )
    f = open( filespec )
    s = f.read
    f.close
    lines = s.split(/$/)
    lines.each {|line| line.strip! }
    IEPG.Lines2Array( lines )
  end #def IEPG.File2Array( filespec )
  def IEPG.Lines2Array( lines )
    if lines[0] =~ /^Content-type: *application\/#{@@
V1SingleContent}|#{@@V2SingleContent}/ # single content
      if ( (tmp = IEPG::fromLines( lines )) != nil )
        return [ tmp ]
      end
    elsif lines[0] =~ /^Content-type: *application\/#{@@
V1MultiContent}|#{@@V2MultiContent}/ # multi contents
      ar = Array.new
      boundary = ""
      for i in 1..( lines.length() -1 ) # get boundary string
        if lines[i] =~ /^boundary:(.*)$/
          boundary = $1.strip
          break
        end
      end
      s=0
      for i in (i+1)..( lines.length() -1 )
        if lines[i] =~ /^#{boundary}/
          if s!=0
            if ( (tmp = IEPG::fromLines( lines[(s+1)..(i-1)] )) != nil )
              ar << tmp
            end
          end
          s=i
        end
        if lines[i] =~ /^#{boundary}--/  # really end
          return ar
        end
      end #for
      return ar # for safty sake
    else
      return [] # unknown
    end # elsif
  end # def IEPG.Lines2Array( inlines )
 


コメント

コメントの投稿


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

トラックバック

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

FC2Ad

まとめ

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