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

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

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

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

Q&A

解決済

1回答

4365閲覧

ディレクトリ下の複数ファイルの読み込み、書き換え、別名で出力

manie1631

総合スコア8

Ruby

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

0グッド

1クリップ

投稿2017/12/11 04:47

ディレクトリ下のある全てのファイルを読み込み、それぞれ一行ずつ数値の計算処理を行い元のファイル名に"_"などをつけるような形で別ファイルとして出力するような処理を行いたいです。

Dir.glob("**/*").each do |f|

のような形でディレクトリ下のファイルを取得した後に一つずつのファイルに対する処理をどう書いていけばいいかわかりません。どのように書けば良いでしょうか。

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

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

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

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

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

guest

回答1

0

ベストアンサー

「一行ずつ数値の計算処理を行い」が具体的にどういう処理かよく分からないのですが,仮に元ファイルの各行に一つの整数が書いてあって,それを 2 倍したものを別ファイルに書き出す,という話だと仮定します。

結果を格納するファイルは,ファイルに _ を付けてもよいのですが,ディレクトリーを別にしたほうが管理しやすいかと思い,そうしてみます。

元ファイルは,カレントディレクトリー直下の source の下に入っているとして,結果のファイルは destination の下に格納する,とします。

Dir.glob("**/*") という書き方をされているので,元ファイルはすべてディレクトリー直下にあるとは限らず,サブディレクトリーに入っていることもあるのかな,と思いました。
そうなると,標準添付の pathname ライブラリーを使うと楽かと思います。

こんな感じでどうでしょうか。

rb

1require "pathname" 2 3source_dir = Pathname("source") 4destination_dir = Pathname("destination") 5 6Pathname.glob(source_dir.join("**/*")) do |source_path| 7 # ファイルじゃないとき(ディレクトリーのとき)はスキップ 8 next unless source_path.file? 9 10 # source_dir から見た相対パス 11 rel_path = source_path.relative_path_from source_dir 12 13 # 保存先のパス 14 destination_path = destination_dir.join(rel_path) 15 16 # ディレクトリーを必要に応じて作成 17 destination_path.dirname.mkpath 18 19 # 書き出し 20 destination_path.open "w" do |f| 21 # 元ファイルの各行について繰り返し 22 source_path.each_line do |line| 23 f.puts line.to_i * 2 24 end 25 end 26end

投稿2017/12/11 16:05

scivola

総合スコア2108

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

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

manie1631

2017/12/15 17:36

ありがとうございます。わかりやすく参考になりました!
manie1631

2017/12/15 18:25

重ねての質問で申し訳ないのですが、読み込むファイルに複数の要素が書かれていて、それをカンマ区切りで扱いたいです。csvライブラリを用いて書こうとしているのですが上手くいきません。回答のような形と組み合わせることはできますか?
scivola

2017/12/16 13:33

もう少し具体的になりませんか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問