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

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

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

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

Q&A

解決済

1回答

370閲覧

CSVを開いてputsできない

pinecone

総合スコア18

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby on Rails 6

Ruby on Rails 6は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Amazon EC2

Amazon EC2は“Amazon Elastic Compute Cloud”の略称です。Amazon Web Services(AWS)の一部であり、仮想化されたWebサーバーのコンピュータリソースをレンタルできるサービスです。

0グッド

0クリップ

投稿2022/08/27 12:49

前提

railsで他サーバからjsonをダウンロードして、
csvに変換してクライアントPCに渡すシステムを作ってます。
もともとデスクトップアプリで機能していたものを、
AWS cloud9上で動くようにしたいと考えています。

csvを操作する機能を実装中に以下のエラーメッセージが発生しました。
puts siposcsv[0][0] のところです。
あまりに簡単なことが出来ないので単純な勘違いをしてると思います。

実現したいこと

  • 開いたcsvファイルをテスト用に、putsで一部表示したい。

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

undefined method `[]' for #<CSV:0x00007f9fac019e80>

該当のソースコード

ruby

1class HelloworldController < ApplicationController 2 def index 3 pass="./01_sipos.csv" 4 begin 5 siposcsv=CSV.open(pass,"w",encoding:"SJIS") 6 siposcsv << [0,2] 7 puts siposcsv[0][0] 8 send_data(siposcsv,filename: "01_sipos.csv",format: CSV) 9 rescue => e 10 puts e.message 11 end 12 siposcsv.close 13 end 14end

試したこと

CSVファイルを開いたらデータは格納されてました。
イメージ説明

補足情報(FW/ツールのバージョンなど)

IDE:Amazon Cloud9
サーバ:Amazon EC2
Rails 6.1.4.4
ruby 2.7.5p203 (2021-11-24 revision f69aeb8314) [x86_64-linux]

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

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

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

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

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

guest

回答1

0

ベストアンサー

siposcsv=CSV.open(pass,"w",encoding:"SJIS") の siposcsv は https://docs.ruby-lang.org/ja/2.7.0/class/CSV.html#S_OPEN を見ていただくとわかりますが、 CSV オブジェクト です。これは class CSV のオブジェクトで、配列ではないし、まして配列の配列ではありません。
ですので、undefined method `[]' for #<CSV です。
この puts はなんのために? debugでしたら削除しましょう。

投稿2022/08/27 13:05

winterboum

総合スコア23347

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

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

pinecone

2022/08/27 13:18

他サイトで、以下のような記述があったので、 二次元配列と類似の扱いが出来るものと勘違いしてました。 ----------------------------------------------- csv_data = CSV.read("sample.csv") # 返り値は2次元の配列になるので、以下のようにアクセスできる puts csv_data[0][0] # => 分類 ----------------------------------------------- putsは完全にデバッグ用です。 (記載したもの全体が動作確認用なので、終わったら削除します) ご教授いただきありがとうございます。
winterboum

2022/08/27 13:26

CSV.read は csvファイルを読み込んで2次元配列(のようなもの)を返しますが、 CSV.openFile.open と同じで、ファイルのIOの入口を作るだけです。
pinecone

2022/08/27 13:41

ありがとうございます。 readしたものとopenしたものと同じ取り扱いができると 思い込んでました。 理解が進んだので次の課題に進めます。 ありがとうございました。
pinecone

2022/08/27 14:25

理解が進んだため、これが片付いたら質問しようと思ってた課題も おかげさまで解決しました。これで次の課題に進めます。 重ねてありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問