質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1112閲覧

CSVでIDを読み込み、配列で格納した後のハッシュ化について

yn047

総合スコア10

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

ハッシュ

ハッシュは、高速にデータ検索を行うアルゴリズムのことです。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/01/31 10:44

前提・実現したいこと

現在、電車の経路案内プログラムを作成しております。
CSVファイルからstationcodeと呼ばれる7桁の数字をcsv.rbの配列として格納し、
さらにハッシュ化を行いたいと考えております。

発生している問題・エラーメッセージ

ハッシュ化をするためのコードが理解できない。

エラーメッセージ

該当のソースコード

Ruby

1ソースコード 2equire "csv" 3 4station_codes = [] 5CSV.foreach("station20191227free.csv", headers: true) do |row| 6 station_codes << row[0] 7 8 puts hash[:id] = Hash[row] 9end

該当のソースコード(station20191227free.csv)

station_cd,station_g_cd,station_name,station_name_k,station_name_r,line_cd,pref_cd,post,add,lon,lat,open_ymd,close_ymd,e_status,e_sort
1110101,1110101,函館,,,11101,1,040-0063,北海道函館市若松町12-13,140.726413,41.773709,1902-12-10,,0,1110101
1110102,1110102,五稜郭,,,11101,1,041-0813,函館市亀田本町,140.733539,41.803557,,,0,1110102
1110103,1110103,桔梗,,,11101,1,041-0801,北海道函館市桔梗3丁目41-36,140.722952,41.846457,1902-12-10,,0,1110103
1110104,1110104,大中山,,,11101,1,041-1121,亀田郡七飯町大字大中山,140.71358,41.864641,,,0,1110104
1110105,1110105,七飯,,,11101,1,041-1111,亀田郡七飯町字本町,140.688556,41.886971,,,0,1110105
1110106,1110106,新函館北斗,,,11101,1,041-1242,北海道北斗市市渡,140.646525,41.9054,1902-12-10,,0,1110106
1110107,1110107,仁山,,,11101,1,041-1101,亀田郡七飯町字仁山,140.635183,41.930011,,,0,1110107
1110108,1110108,大沼,,,11101,1,041-1354,北海道亀田郡七飯町字大沼町4,140.669347,41.971954,1903-06-28,,0,1110108
1110109,1110109,大沼公園,,,11101,1,041-1354,北海道亀田郡七飯町字大沼町85,140.669758,41.980958,1907-06-05,,0,1110109

試したこと

ハッシュ化に関する基本構文を書籍やネットで確認

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tatsu99

2020/01/31 12:01

ハッシュ化するときのキーと値はなんですか?
yn047

2020/02/01 10:38

ご連絡ありがとうございます。 キーはstation_cdで、値に関してはnilで返ってくるようにしたいと考えております。
guest

回答1

0

ベストアンサー

以下のようにしてください。文字コードはあなたの環境にあわせてください。
最後の3行は確認用です。

ruby

1require "csv" 2station_codes = Hash.new 3CSV.foreach("station20191227free.csv", headers: true) do |row| 4 station_codes[row[0]] = nil 5end 6 7station_codes.each do |key,value| 8 p [key,value] 9end 10

以下、実行結果です。
["1110101", nil]
["1110102", nil]
["1110103", nil]
["1110104", nil]
["1110105", nil]
["1110106", nil]
["1110107", nil]
["1110108", nil]
["1110109", nil]

投稿2020/02/01 11:59

tatsu99

総合スコア5493

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yn047

2020/02/02 03:08

ありがとうございます。 ちなみに、下記2つのコードはどういった意味合いがあるのでしょうか? >station_codes = Hash.new >station_codes[row[0]] = nil また、「station_codes = Hash.new」を、「station_codes = {}」と表記することも可能でしょうか?
tatsu99

2020/02/02 04:18

station_codes = Hash.newと station_codes = {} は、同じ結果になります。 ハッシュの追加は、station_codes[キー]=値 で行います。キーはrow[0]、値はnilなので station_codes[row[0]] = nil で、ハッシュの追加を行っています。 station_codes.store(row[0],nil)と書くことも可能です。
yn047

2020/02/03 01:48

ご丁寧に回答いただきありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問