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

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

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

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

Ruby

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

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

配列

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

Q&A

解決済

1回答

661閲覧

【Ruby】csvにeach文を使って書き込みでエラー

kaori_oka

総合スコア176

CSV

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

Ruby

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

foreach

foreachは、List・Collection・Arrayといったデータ構造の各要素に対して繰り返し処理を実行するために扱われる、制御構造の構文です。

配列

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

1グッド

1クリップ

投稿2020/01/15 03:03

前提・実現したいこと

csvを読み込み、そのデータを使用したり、
取得したデータをcsvに書き込むために練習として下記のようなプログラムを作っています。

1.csvを読み込む
2.csvを書き込む
3.書き込んだcsvを読み込む(1.2がうまくできているか見たい意図)

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

console

1./csvtest.rb:25: syntax error, unexpected tIDENTIFIER, expecting do or '{' or '(' 2 url.zip(indexs).each |u i| do 3./csvtest.rb:29: syntax error, unexpected end, expecting end-of-input

endがおかしいと出てますが、doendの文をdoendでくくってはいけないということでしょうか?

該当のソースコード

ruby

1require "csv" 2 3url = [] 4indexs = [] 5index = 1 6 7puts "csvを読み込みます" 8CSV.foreach("url.csv") do |fg| 9 # fgはArrayクラス 10 index = index + 1 11 indexs << index 12 url << fg[0] 13end 14 15puts url 16 17sleep 5 18 19puts "csvを書き込みます" 20 21CSV.open('addurl.csv','w') do |test| 22 23 test << ["項番","URL"] 24 25# ↓該当箇所 26 url.zip(indexs).each |u i| do 27 test << [u,i] 28 end 29# ↑該当箇所 30 31end 32 33sleep 5 34 35puts "書き込んだCSVを再度読み込みます" 36 37CSV.foreach("addurl.csv") do |fg| 38 p fg 39end

試したこと

下記のサイトを参考にしてみました。
each文とzipメソッドで若干使い方が違う?

▼参考記事
【Rubyメモ】eachメソッドで複数の配列を同時にループさせる方法

該当箇所を
url.zip(indexs).each do |u i| ~省略~
** → **url.zip(indexs).each |u i| do ~省略~
こんな感じにしてみたりもしましたが、エラーは変わらずでした。

該当箇所をコメントアウトすると、エラーは出ません。

DrqYuto👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

doendブロックのパラメーターは、do内側に書きます。

each |u i| doではなく、each do |u, i|です。

投稿2020/01/15 03:08

maisumakun

総合スコア145184

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

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

kaori_oka

2020/01/15 03:29

無事に実装できました!
kaori_oka

2020/01/15 03:29

``` ~省略~ CSV.open('addurl.csv','w') do |test| test << ["url","num"] url.zip(indexs).each do |u, i| test << [u,i] end end ~省略~ ```
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問