

プログラムのコードとエラー文を下記に示します。どうすればエラーが解消されるか教えてください。また、csvファイルを使用しているのでそのファイルも下記に示します。よろしくお願いします。

以下のようなrubyのプログラムを書いています。

[code]

        require 'csv'
        hash = Hash.new
        File.foreach('sample.csv') do |row|
          col = row.chomp.split(",")
          if col.length > 4
            for i in 3..col.length-1
              txt += col[i] + "，"
            end
          end
          if hash{:col[2]} == nil
            hash{:col[2]} = 1
          else
            hash{:col[2]} += 1
          end
        end
        puts hash.keys
    
[/code]

**エラーメッセージ**

[code]

    prog$ ruby freq.rb
    freq.rb:12: syntax error, unexpected '=', expecting kEND
        hash{:col[2]} = 1
                       ^
    freq.rb:14: syntax error, unexpected tOP_ASGN, expecting kEND
        hash{:col[2]} += 1
                        ^
    prog$
    
[/code]

**CSVファイル**

[code]

    6,2,4,"<p>One option would be to clone your startup drive to an external disk using something like SuperDuper! or Carbon Copy Cloner. Then you can use System Preferences->Startup Disk to select that external drive as the boot drive. </p>
    
    <p>Once you've rebooted and are running the system off the external drive you can use Disk Utility to run the repair. After you're done, re-select the internal drive as the Startup Disk and reboot.</p>"
    （省略）
    27,2,12,"<p>They aren't really ""in memory,"" more like cached to disk if and when necessary. Many apps don't even use the multitasking or aren't setup for it. When you switch it does actually close the app.</p>
    
    <p>Being in the task bar doesn't guarantee that it's actually in memory, actively running, or both. The OS manages that. </p>"
    
[/code]


CC BY-SA 3.0
2015-10-26T14:52:48.093
18093
2015-10-26T16:07:29.893
2015-10-26T15:10:29.140
9505
question
ruby csv
rubyで数を数えるプログラムのエラーを解消する方法を教えてください。


文法的な問題です。Hash の値の参照方法が間違っています。  
`hash{:col[2]}` を `hash[col[2]]` とすればエラーは解消すると思います。

それより、`require 'csv'` しているのに、CSV の機能を一切使わずに自力で CSV 形式の解析をしているのが気になりました。  
たとえば、次のようにすれば CSV ファイルから1レコードずつ読むことができます。

[code]

    CSV.foreach('sample.csv') do |row|
      ...
    end
    
[/code]

「"」のエスケープもちゃんと処理されるので、簡単です。


CC BY-SA 3.0
2015-10-26T16:07:29.893
18095
2015-10-26T16:07:29.893
3249
18093
answer