アプリ版:「スタンプのみでお礼する」機能のリリースについて

CSVファイルに下記のように商品の単価を記録しておいて、二次元配列に読み込んだところ、配列のどの要素もString型になっていました。数字を"(コーティション)で囲んでいなくても、文字として扱われるのでしょうか?
<CSVファイルの内容>
"りんご",100
"みかん",25

A 回答 (2件)

>数字を"(コーティション)で囲んでいなくても、文字として扱われるのでしょうか?


文字として、扱われます。もし、その箇所を数値型(Integer型、又はFloat型)にしたい場合は
明示的に、自分で変換する必要があります。
以下、サンプルリストです。
CSVファイルの内容(CSV.txt)
------------------------------------
"りんご",100,"A",9.3
"みかん",25,"B",6.687
-------------------------------
スクリプトの内容
-----------------------------
# coding:WINDOWS-31J
#
require "csv"

arrs = CSV.read("csv.txt")
new_arrs = arrs.map { |a,b,c,d| [a,b.to_i,c,d.to_f] }
p arrs
p new_arrs
---------------------------------------------
実行結果
[["りんご", "100", "A", "9.3"], ["みかん", "25", "B", "6.687"]]
[["りんご", 100, "A", 9.3], ["みかん", 25, "B", 6.687]]
ーーーーーーーーーーーーーーーーーーーーーーー
データを左からA列,B列,C列,D列
とすると、B列をInteger型に変換、D列をFloat型に変換しています。
変換時、データが数字でないと、例外が発生しますので、ご注意ください。
    • good
    • 1
この回答へのお礼

mapというのがあるんですね。
うまくいきました、ありがとうございます。

お礼日時:2015/02/02 20:41

#1です。


データが数字でないと例外が発生すると回答しましたが、
サンプルのString#to_i,String#to_fは、例外を発生しません。
「データが数字でないと期待した結果の数値になりません」が正しいです。
お詫びして、訂正します。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!