2017-02-16 5 views
0

私はRubyの世界では初めてです。ルビーのすべてのファイルの内容を反復して印刷する

私の課題の1つは、フォルダ内のすべてのテキストファイルの内容(トップレベルのみ)を読み込み、ファイルの内容を1つの出力ファイルに追加またはマージしてリダイレクトする方法です。

私は以下のような形式を期待している:

出力ファイル

File Name: 1st file name 

all its contents 
==================================== 
File Name: 2nd file name 

all its contents 
==================================== 
File Name: 3rd file name 

all its contents 
==================================== 
    .... 
    .... 


==================================== 

私は以下のスクリプトを記述するために管理しますが、出力ファイルは空です。どんな提案もお願いします。

File.open('C:\Users\darkop\Desktop\final_output.txt','a') do |final| 
    @files = Dir.glob("D:\text\*.txt") 
    for file in @files 
    text = File.open(file, 'r').read.sub(/#$/?\z/, $/) 
    text.each_line do |line| 
     puts "File Name:"#{file} 
     puts 
     final << line 
     puts "=" * 20 
     end 
    end 
end 

また、前述の形式の出力をテキストファイルではなくワードドキュメントにリダイレクトすることはできますか?

多くのありがとうございます。

+0

「試行」と「予想される出力」を質問に含めました。あなたはまた、あなたが得ている "あなたの出力"または "エラー"を追加する必要があります。 –

+0

@JagdeepSingh:空白の出力ファイルが出てきます。 Thnks。 – Goku

答えて

1

これは動作するはずです。

puts "File Name:"#{file}があるため、ファイル名が空でした。この方法では、二重引用符で囲まれていないため、補間されません。

また、puts lineの代わりにputsを使用したため、ファイルの内容が表示されませんでした。

File.open('C:\Users\darkop\Desktop\final_output.txt','a') do |final| 
    @files = Dir.glob("D:\text\*.txt") 
    for file in @files 
    text = File.open(file, 'r').read.sub(/#$/?\z/, $/) 
    text.each_line do |line| 
     puts "File Name: #{file}" 
     puts 
     puts line 
     final << line 
     puts "=" * 20 
    end 
    end 
end 

-EDIT-

あなたはルビーに新しいしているので、それは代わりにfor .. inループの、eachループを使用することをお勧めします。また、Word文書には、拡張名.docの出力名を指定するだけです。

File.open('C:\Users\darkop\Desktop\final_output.doc','a') do |final| 
    @files = Dir.glob("D:\text\*.txt") 
    @files.each do |file| 
    text = File.open(file, 'r').read.sub(/#$/?\z/, $/) 
    text.each_line do |line| 
     puts "File Name: #{file}" 
     puts 
     puts line 
     final << line 
     puts "=" * 20 
    end 
    end 
end 
+0

Van Dijik:私の間違いを特定するための+1。 上記のフォーマットを得るためにさらに修正を加えました: 'File.open( 'D:/output.doc'、 'a')do | final | @files = Dir.glob:@filesにおけるファイルの( "D /テキスト/ * TXT") final.puts "ファイル名:#{ファイル}" \t final.putsテキスト= File.open(ファイル、 'r')。read.sub(/#$ /?\ z /、$ /) text.each_line do | line | 最終<<ライン \t終わり \t final.puts "=" * 70 エンド end' ここにあなたの時間を感謝しています。 – Goku

関連する問題