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

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

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

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

Ruby

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

Q&A

解決済

4回答

1076閲覧

RubyでCSVファイルを空にしたい

no1knows

総合スコア3365

CSV

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

Ruby

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

0グッド

0クリップ

投稿2018/03/09 13:42

編集2018/03/10 09:24

前提・実現したいこと

既存CSVファイルの中身を空にしたいのですがどのようにやればよいかわかりません。

試したこと

ファイルの削除⇒作成はできましたが、空にできません。

ruby

1if File.file?("aaa.csv") then 2 File.delete("aaa.csv") 3end

注意点

下記のようなCSVファイルへ書き込みの命令ではなく、「CSVファイル内のデータを削除して、空の状態」にしたいです。

ruby

1open("aaa.csv","w"){}

どうぞよろしくお願いします。

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

ご回答頂いた方からのアドバイスで、一度、この質問に至った経緯を書き直したのですが、最初の質問に直しました。
同じような疑問を持った方が見た時にわかりやすいと思ったからです。
書き直した質問が気になる方は、編集履歴をご確認ください。

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

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

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

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

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

guest

回答4

0

csv ファイルが空というのを、
ヘッダ行だけがあって、データ行がない
と解釈して、csv ファイルを空にする処理を書いてみました。
csv.rb

ruby

1# frozen_string_literal: true 2 3require 'csv' 4 5def clear_csv(path, headers) 6 CSV.open(path, 'w') { |csv| csv << headers } 7end 8 9def create_csv(path, headers, rows) 10 CSV.open(path, 'w') do |csv| 11 csv << headers 12 rows.each { |row| csv << row } 13 end 14end 15 16def show_file(path) 17 puts "#--- #{path}" 18 File.open(path, 'r') do |file| 19 file.each_line { |line| puts line } 20 end 21 puts '#---' 22end 23 24path = 'test.csv' 25headers = %w[名前 TEL] 26data = [ 27 ['麻生', '123-456-7890'], 28 ['加藤', '111-222-3333'] 29] 30 31create_csv(path, headers, data) 32show_file(path) 33puts 34clear_csv(path, headers) 35show_file(path)

実行例
イメージ説明

投稿2018/03/10 11:45

katoy

総合スコア22324

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

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

no1knows

2018/03/11 03:25

Katoyさん、確かにヘッダーありの方が利用する頻度は高い気がします。 ありがとうございます!
guest

0

ベストアンサー

ruby

1File.truncate("aaa.csv", 0)

動くかどうかも知らんし、ファイルを開いたまま書き換えたツケがどうでるかも知らん


質問が書き換わってたで追記

編集し終わったなら出力したらいいのでは?
試行錯誤中ならpryやirbで試します。

投稿2018/03/10 07:49

編集2018/03/10 08:02
asm

総合スコア15147

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

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

no1knows

2018/03/10 09:12

ありがとうございます。 期待した動作を確認することができました!
no1knows

2018/03/10 09:14

いや、本来はお答え頂いたものが欲しかったので、助かりました! またpryやirbなどは知らないことなので調べてみたいと思います!
guest

0

検証のためaaa.csvを開いた状態で、

これ、エディタとか別アプリで開いた状態、ということですよね。
ズバリ、zilchさんが意図したことをやるすべは無い、と思います。

空にする方法は、otnさんがすでに提示済みです。やり方はいくらでもあります。

投稿2018/03/09 23:24

編集2018/03/09 23:26
kazto

総合スコア7196

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

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

no1knows

2018/03/10 01:31

ありがとうございます。 open("aaa.csv","a"){}だと、別アプリで開いた状態でファイル内の追加ができたので、CSVファイルを直接変更すればできるのかと思っていました。 結論としてRuby(のcsvライブラリのopenメソッド)では 「新たに空のCSVファイルを書き出すことはできる」が、 「CSVファイルを空にすることはできない」ということで理解しました。
guest

0

Ruby

1open("aaa.csv","w"){}

投稿2018/03/09 14:49

otn

総合スコア84423

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

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

no1knows

2018/03/09 15:30 編集

ありがとうございます。 これだと書き込みモードになるかと思いますが、データの動きとしては、新たに作り直すという形のようです。 検証のためaaa.csvを開いた状態で、open("aaa.csv","w"){}をおこなうと、ファイルが消えてしまうようで、開いていたファイルが閉じてしまいます。 検証をスムーズに行うため、CSVファイルを空にする方法が必要なのです。 引き続きどうぞよろしくお願いいたします。
otn

2018/03/09 15:55 編集

聞きたい内容が、質問文に全部は書いてないということでしょうか? 質問文に全部書いてください。 > 既存CSVファイルの中身を空にしたい と言う質問であれば、上記が正しいやり方なのですが。
otn

2018/03/10 04:19

これが違うのであれば、あなたのしたいことは「既存CSVファイルの中身を空にしたい」ではないので、何をしたいかを具体的に質問文に書いてください。
no1knows

2018/03/10 07:23

otnさん、承知いたしました!
no1knows

2018/03/10 09:25

一度、質問を修正しましたが、当初の質問で期待する回答をいただきましたので、当初の質問に戻しましたのでご了承頂ければと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問