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

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

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

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

Ruby

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

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Q&A

解決済

2回答

3831閲覧

RubyでCSVファイルとJSONファイルの読み込み、変換したJSONファイルの出力を行いたいです

AudioStakes

総合スコア41

CSV

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

Ruby

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

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

0グッド

0クリップ

投稿2015/12/02 13:06

Rubyで
①CSVファイルとJSONファイルの読み込み
②読み込んだデータを用いてJSONファイルを変換
③変換したJSONファイルの出力
を行いたいです。
(データの変換メソッドはすでにあります)

例えば、
入力ファイルとして
test.csv
test.json
があり、出力ファイルとして
test_out.json
を出力したい時に
以下のコードをどのように書き換えれば良いでしょうか?

#!/usr/local/bin/ruby require 'json' require 'csv' class Converter attr_accessor :source, :pattern def convert source.each do |chunk| chunk['properties']['name'] = replace(chunk['properties']['name']) end end private def replace(str) if (result = pattern.find { |s| s[0] == str }) # 該当したので、置き換えるべき文字列を返す result[1] else # 該当するものがなかったのでそのまま str end end end converter = Converter.new converter.source = JSON.parse(<<"") [ {"type":"Polygon","properties":{"name":"札幌市"},"arcs":[[0,1,2,3,4,5]]}, {"type":"Polygon","properties":{"name":"旭川市"},"arcs":[[6,-6,7,8,9,10]]} ] converter.pattern = CSV.parse(<<"") 札幌市,id011002 函館市,id012025 小樽市,id012033 旭川市,id012041 puts converter.source # before converter.convert puts converter.source # after puts JSON.dump(converter.source)

以下のようにjsonファイルとcsファイルの中身を手作業でコピペして準備する、ということを避けたいのです。
(実際のjsonファイルの中身が数万行に及ぶため)

converter.source = JSON.parse(<<"") [ {"type":"Polygon","properties":{"name":"札幌市"},"arcs":[[0,1,2,3,4,5]]}, {"type":"Polygon","properties":{"name":"旭川市"},"arcs":[[6,-6,7,8,9,10]]} ]
converter.pattern = CSV.parse(<<"") 札幌市,id011002 函館市,id012025 小樽市,id012033 旭川市,id012041

以下がtest.jsonファイルの中身を表しており
(実際のjsonファイルの中身が数万行に及びます)

{"type":"Polygon","properties":{"name":"札幌市"},"arcs":[[0,1,2,3,4,5]]}, {"type":"Polygon","properties":{"name":"旭川市"},"arcs":[[6,-6,7,8,9,10]]}

以下がtest.csvファイルの中身を表しています。

札幌市,id011002 函館市,id012025 小樽市,id012033 旭川市,id012041

どのように書き換えれば実現できるか、ご存じの方がおりましたらどうぞ知恵をお貸しください。

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

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

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

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

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

guest

回答2

0

自己解決

別の方法で目的の結果を得ることができるようになりましたので、ここは終了とさせていただきます。
回答してくださったkatoyさん、ありがとうございました。

投稿2015/12/03 23:28

AudioStakes

総合スコア41

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

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

0

プログラム中に csv の 内容を書く(pasteする) のでなく、ファイルから読み込むすると良いとおもいます。

csv ファイルを読み込む例が幾つも示されています。

json についても同様に ファイルを読む方法はネットで検索すれば、いくつも見つかると思います。

投稿2015/12/02 23:00

katoy

総合スコア22324

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

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

AudioStakes

2015/12/03 04:57

教えて頂きありがとうございます。 読み込んだファイルをどのようにメソッドに組み込み、そしてどのように結果をファイルとして出力するか、調べてやってみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問