<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: parse code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Thu, 21 Aug 2008 06:08:47 GMT</pubDate>
    <description>DZone Snippets: parse code</description>
    <item>
      <title>Parse Windows .ini Format with Ruby</title>
      <link>http://snippets.dzone.com/posts/show/563</link>
      <description>I didn't write this, I'm just posting it in case someone else finds it useful. I needed to parse a file that turned out to be windows .ini. gdsx in #ruby-lang came up with this for me. &lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;  #thanks to gdsx in #ruby-lang&lt;br /&gt;  def tame(input)&lt;br /&gt;          tamed = {}&lt;br /&gt;&lt;br /&gt;          # split data on city names, throwing out surrounding brackets&lt;br /&gt;          input = input.split(/\[([^\]]+)\]/)[1..-1]&lt;br /&gt;&lt;br /&gt;          # sort the data into key/value pairs&lt;br /&gt;          input.inject([]) {|tary, field|&lt;br /&gt;                  tary &lt;&lt; field&lt;br /&gt;                  if(tary.length == 2)&lt;br /&gt;                          # we have a key and value; put 'em to use&lt;br /&gt;                          tamed[tary[0]] = tary[1].sub(/^\s+/,'').sub(/\s+$/,'')&lt;br /&gt;                          # pass along a fresh temp-array&lt;br /&gt;                          tary.clear&lt;br /&gt;                  end&lt;br /&gt;                  tary&lt;br /&gt;                  }&lt;br /&gt;&lt;br /&gt;          tamed.dup.each { |tkey, tval|&lt;br /&gt;                  tvlist = tval.split(/[\r\n]+/)&lt;br /&gt;                  p tvlist&lt;br /&gt;                  tamed[tkey] = tvlist.inject({}) { |hash, val|&lt;br /&gt;                          k, v = val.split(/=/)&lt;br /&gt;                          hash[k]=v&lt;br /&gt;                          hash&lt;br /&gt;                          }&lt;br /&gt;                  }&lt;br /&gt;&lt;br /&gt;          tamed&lt;br /&gt;  end&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;here's what the input looks like&lt;br /&gt;&lt;code&gt;&lt;br /&gt;[Amsterdam]  &lt;br /&gt;Address=Amstelveenseweg 438;1084 JH;Amsterdam&lt;br /&gt;&lt;br /&gt;[Antwerp]  &lt;br /&gt;Address=Uitbreidingstraat 4;4-600;Antwerp&lt;br /&gt;&lt;br /&gt;[Austin]  &lt;br /&gt;Address=4221 South Harbor Expressway, Suite 400;Austin, Texas 78746&lt;br /&gt;&lt;br /&gt;[Baltimore / Smith]&lt;br /&gt;City=Baltimore &lt;br /&gt;Address=225 Johnson Avenue;Baltimore, Maryland 21209-3600&lt;br /&gt;&lt;br /&gt;[Baltimore / Calvert]&lt;br /&gt;City=Baltimore&lt;br /&gt;Address=151 South Belmont Street, Suite 2350;Baltimore, Maryland 21202-6832&lt;br /&gt;&lt;br /&gt;[Bangkok]&lt;br /&gt;Address=Unit 543, London Tower;495 North Sathorn Road, Yannawa, Sathorn Bangkok 45467&lt;br /&gt;Country=Thailand&lt;br /&gt;&lt;br /&gt;[Bergen]&lt;br /&gt;Country=Norway  &lt;br /&gt;City=Bergen&lt;br /&gt;Address=Torgallmenningen 4B;PO Box 2153 Sentrum, N-5811;Bergen&lt;br /&gt;&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;here's the output&lt;br /&gt;&lt;code&gt;&lt;br /&gt;{"Bergen"=&gt;{"City"=&gt;"Bergen", "Country"=&gt;"Norway", "Address"=&gt;"Torgallmenningen 4B;PO Box 2153 Sentrum, N-5811;Bergen"}, "Antwerp"=&gt;{"Address"=&gt;"Uitbreidingstraat 4;4-600;Antwerp"}, "Baltimore / Smith"=&gt;{"City"=&gt;"Baltimore", "Address"=&gt;"225 Johnson Avenue;Baltimore, Maryland 21209-3600"}, "Amsterdam"=&gt;{"Address"=&gt;"Amstelveenseweg 438;1084 JH;Amsterdam"}, "Bangkok"=&gt;{"Country"=&gt;"Thailand", "Address"=&gt;"Unit 543, London Tower;495 North Sathorn Road, Yannawa, Sathorn Bangkok 45467"}, "Austin"=&gt;{"Address"=&gt;"4221 South Harbor Expressway, Suite 400;Austin, Texas 78746"}, "Baltimore / Calvert"=&gt;{"City"=&gt;"Baltimore", "Address"=&gt;"151 South Belmont Street, Suite 2350;Baltimore, Maryland 21202-6832"}&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Is this also an example of a state machine in Ruby?</description>
      <pubDate>Sun, 07 Aug 2005 09:21:03 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/563</guid>
      <author>d723 (Derek Gulbranson)</author>
    </item>
  </channel>
</rss>
