重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

ruby超初心者です。教えてください。
このようなディレクトリ構造があるとします。

root_dir
|--12_dir
| a.txt
| b.txt
|--23_dir
| a.txt
| b.txt


a.txt, b.txtには、ともに
A=
B=
と書かれているとします。

このとき、root_dir(c:\root_dir)にアクセスして、
12_dir直下のa.txtには、12_dirの最初の文字"1"をとって
A=1
B=(1)
と書き換え、
12_dir直下のb.txtには、12_dirの第2の文字"2"をとって
A=2
B=(2)
と書き換え、
23_dir直下のa.txtには、23_dirの最初の文字"1"をとって
A=2
B=(2)
と書き換え、
23_dir直下のb.txtには、23_dirの第2の文字"3"をとって
A=3
B=(3)
と書き換えるには、Rubyでどのようなプログラムを書けばよいのでしょうか。
なお、実際のファイル数はもっと膨大です。

よろしくお願いします。

A 回答 (1件)

こんにちは


こんなかんじで如何でしょうか?

-----ここから
# coding: windows-31J

ROOT_DIR = 'C:/root_dir'

def add_str(file, char)
File.open('temp.txt', 'w') do |fo|
File.foreach(file) do |line|
line.chomp!
case line
when 'A='; fo.puts "#{line}#{char}"
when 'B='; fo.puts "#{line}(#{char})"
else fo.puts line
end
end
end
File.delete(file)
File.rename('temp.txt', file)
end

Dir.chdir(ROOT_DIR)
Dir.foreach('.') do |subdir|
next if /\.\.?/ =~ subdir
next if File.file?(subdir)

c0 = subdir[0]
c1 = subdir[1]
Dir.chdir(subdir)
add_str('a.txt', c0) if File.exist?('a.txt')
add_str('b.txt', c1) if File.exist?('b.txt')
Dir.chdir('..')
end
-----ここまで
    • good
    • 0
この回答へのお礼

完璧です。感動しました。ヽ(^。^)丿

でも、何やってるのか全然理解できないですが。(;´▽`A``

とりあえず、これから調べて、何やってるかわかるようになれば、少しだけスキルがアップできますね!

お礼日時:2012/11/03 17:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!