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

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

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

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

Ruby

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

Q&A

解決済

2回答

1290閲覧

【Ruby】csvデータを読み込むと最初のレコードだけ1文字多い

kaori_oka

総合スコア176

CSV

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

Ruby

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

1グッド

2クリップ

投稿2020/01/19 08:31

前提・実現したいこと

CSVで読み取った苗字で、苗字3文字のみ振り分けをするような実装をしているのですが、
CSVで読み取ったデータの最初のレコードだけ1文字多くカウントされてしまいます。

発生している問題

問題なくできているかどうかを、
3文字の文字列だけ頭に☆マークをつけてログとして表示させるというテストをしていました。
下記のようなCSVを使用しまして、

csvの中身

実行すると下記のようなログが出てきます。

console

1☆田中 2鈴木 3☆五十嵐 4☆隅河内 5☆佐々木 6よんもじ 7ごごごごご 89あい 10☆あいう

該当のソースコード

ruby

1require "csv" 2 3keywords = [] 4 5CSV.foreach("keywords.csv") do |keyword| 6 keywords << keyword[0] 7end 8 9keywords.each do |keyword| 10 if keyword.length == 3 11 puts "☆#{keyword}" 12 else 13 puts keyword 14 end 15end 16

試したこと

検索してみたのですが、うまくひっかからず、
データ自体の半角・全角スペースの確認をしてみたのですが、
そういったものがみうけられなかったのでこちらで質問してみようと思いました。

DrqYuto👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

お使いのCSVファイル「keywords.csv」の文字エンコードはUTF-8だと思いますが、恐らくファイルにBOMがついています。BOMがあるかを確認し、あれば除去してください。(実際こちらでもruby 2.6.4で試したところ、BOMがあると最初の1行目の"田中"は4文字になりました)

投稿2020/01/19 09:26

dodox86

総合スコア9183

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

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

kaori_oka

2020/01/19 09:44

CSV(UTF-8)で確認しました! BOM探してみます!
guest

0

CSVファイルになにか見えない余分なものが付いているのでは??という予感。

  1. keywords << keyword[0] の所に

keyword[0].each_char.map{|c| c.ord }
するとどうなりますか

  1. そのCSVはどうやって作りましたか?

例えば Windoes の なにがしという editor で作製 とか Excelで作製とか

投稿2020/01/19 09:14

winterboum

総合スコア23329

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

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

kaori_oka

2020/01/19 09:43

ご確認ありがとうございます! 1) keywords << keyword[0] の所に ~ 〜省略〜 CSV.foreach("keywords.csv") do |keyword| keywords << keyword[0].each_char.map{|c| c.ord } end 〜省略〜 としまして、出力したところ下記のようなログとなりました。 -----ログ結果----- ☆[65279, 30000, 20013] 37428 26408 ☆[20116, 21313, 23888] ☆[38533, 27827, 20869] ☆[20304, 12293, 26408] 12424 12435 12418 12376 12372 12372 12372 12372 12372 12354 12354 12356 ☆[12354, 12356, 12358] -----ログ結果----- 2) そのCSVはどうやって作りましたか? macのエクセルでA列に単語を順番に入れていき、csv(UTF-8)で保存しました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問