<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Ruby on nnasaki のブログ</title>
    <link>https://blog.nnasaki.com/categories/ruby/</link>
    <description>Recent content in Ruby on nnasaki のブログ</description>
    <image>
      <title>nnasaki のブログ</title>
      <url>https://blog.nnasaki.com/ogp.png</url>
      <link>https://blog.nnasaki.com/ogp.png</link>
    </image>
    <generator>Hugo</generator>
    <language>ja-JP</language>
    <lastBuildDate>Tue, 05 Feb 2013 01:22:12 +0900</lastBuildDate>
    <atom:link href="https://blog.nnasaki.com/categories/ruby/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Ruby 1.9.3 で CSV を加工したい</title>
      <link>https://blog.nnasaki.com/entry/2013/02/05/012212/</link>
      <pubDate>Tue, 05 Feb 2013 01:22:12 +0900</pubDate>
      <guid>https://blog.nnasaki.com/entry/2013/02/05/012212/</guid>
      <description>&lt;p&gt;Web上のサンプルは1.8系の頃ばかりで割と少ない感じがしたので、メモしておく。&lt;/p&gt;
&lt;p&gt;たとえば、以下のような &lt;a href=&#34;http://d.hatena.ne.jp/keyword/CSV&#34;&gt;CSV&lt;/a&gt; から Path と FileName カラムを 削除して、FilePath という一つのカラムに結合して、さらに Text の内容に改行を含めたい場合の例。&lt;/p&gt;
&lt;figure class=&#34;figure-image figure-image-fotolife&#34;&gt;&lt;img src=&#34;http://cdn-ak.f.st-hatena.com/images/fotolife/n/nnasaki/20130204/20130204005022.jpg&#34; alt=&#34;f:id:nnasaki:20130204005022j:plain&#34; title=&#34;f:id:nnasaki:20130204005022j:plain&#34; class=&#34;hatena-fotolife&#34; itemprop=&#34;image&#34;&gt;&lt;figcaption&gt;f:id:nnasaki:20130204005022j:plain&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;完成形はこんな感じ。&lt;/p&gt;
&lt;figure class=&#34;figure-image figure-image-fotolife&#34;&gt;&lt;img src=&#34;http://cdn-ak.f.st-hatena.com/images/fotolife/n/nnasaki/20130204/20130204005015.jpg&#34; alt=&#34;f:id:nnasaki:20130204005015j:plain&#34; title=&#34;f:id:nnasaki:20130204005015j:plain&#34; class=&#34;hatena-fotolife&#34; itemprop=&#34;image&#34;&gt;&lt;figcaption&gt;f:id:nnasaki:20130204005015j:plain&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;作成したコードは以下。&lt;code&gt;ruby convert.rb blog.csv &amp;gt; convert.csv&lt;/code&gt; のように実行する。&lt;/p&gt;
&lt;p&gt;ポイントは4つ&lt;/p&gt;
&lt;h3 id=&#34;ハッシュのように扱える&#34;&gt;ハッシュのように扱える&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;:headers =&amp;gt; true&lt;/code&gt; を指定することで、&lt;a href=&#34;http://d.hatena.ne.jp/keyword/CSV&#34;&gt;CSV&lt;/a&gt; の一行目のカラムを Key として、それぞれのフィールドを Value で使えます。左から何番目と指定する必要が無いので、&lt;a href=&#34;http://d.hatena.ne.jp/keyword/CSV&#34;&gt;CSV&lt;/a&gt; の形式が変わっても使えるのでとても便利&lt;/p&gt;
&lt;h3 id=&#34;コマンドのように実行できる&#34;&gt;コマンドのように実行できる&lt;/h3&gt;
&lt;p&gt;&lt;a href=&#34;http://d.hatena.ne.jp/keyword/CSV&#34;&gt;CSV&lt;/a&gt;.filter を使用すると、第一引数を INPUT として扱い、OUTPUT は標準出力となります。これで、&lt;a href=&#34;http://d.hatena.ne.jp/keyword/sed&#34;&gt;sed&lt;/a&gt; や &lt;a href=&#34;http://d.hatena.ne.jp/keyword/awk&#34;&gt;awk&lt;/a&gt; 等の感覚で実行できるスクリプトが簡単に作成できます。&lt;/p&gt;
&lt;h3 id=&#34;ヘッダーの加工は注意が必要&#34;&gt;ヘッダーの加工は注意が必要&lt;/h3&gt;
&lt;p&gt;ヘッダーだけ特別な加工をしたいので、&lt;code&gt;if row.header_row?&lt;/code&gt; としています。next で以降の処理はさせずに次のループに移るようにしています。&lt;/p&gt;
&lt;h3 id=&#34;mac-の場合改行コード入力は-alt-で入力すること&#34;&gt;MAC の場合、改行コード入力は ALT+¥ で入力すること&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;row[&amp;quot;Text&amp;quot;] &amp;lt;&amp;lt; &amp;quot;ああ\nええ&amp;quot;&lt;/code&gt; に改行コード &lt;code&gt;\n&lt;/code&gt; を入れても改行できず、おっかしいなーと思ったら、ALTを押さないと円マーク(&lt;code&gt;¥&lt;/code&gt;)になってしまい、バックスラッシュ(&lt;code&gt;\&lt;/code&gt;)にならなかったためでした。&lt;/p&gt;
&lt;p&gt;いつもはコンソールで &lt;a href=&#34;http://d.hatena.ne.jp/keyword/irb&#34;&gt;irb&lt;/a&gt; でやっているので気づきませんでしたが、今回は &lt;a href=&#34;http://d.hatena.ne.jp/keyword/Sublime&#34;&gt;Sublime&lt;/a&gt; Text 2 でエディタ使ってやってたら、はまってしまった。&lt;/p&gt;
&lt;p&gt;2000行ぐらいならほぼ一瞬で済んでしまうようなので、良さそう。まだ自分の中でデータ加工する際の複数のハッシュキーを削除する方法とか、ハッシュではない普通の配列とシンボルとかがごちゃごちゃになってて &lt;a href=&#34;http://d.hatena.ne.jp/keyword/Ruby&#34;&gt;Ruby&lt;/a&gt; 力の足りなさを痛感しました。&lt;/p&gt;
&lt;hr&gt;</description>
    </item>
  </channel>
</rss>
