2012-03-21 3 views
1

私が書いているRubyスクリプトは毎朝実行され、バックアップファイルに関する情報を取得してcsvファイルに書き出します。このファイルには、最初の行に列名があります。私は、ファイルの末尾に追加することによって動作するようにそれを得ているRuby:ファイルの2行目にテキストを追加

open("#{curDir}/Backup_Times.csv", 'a') do |f| 

     ... 
end 

私が最初にExcelでソートすることなく、最新のデータを参照したいと思います。

Rubyでは、このデータをファイルの2行目から書き込む方法はありますか?

+1

あなたは達成しようとしていることをより正確に説明するためにこの質問を言い換えることができますか? –

+1

すべてのファイルを読み込み、変更されたファイルを全体としてオプションで書き込んでいますか? –

答えて

2

新しいファイルを書き込んで、変更を希望の行に適用し、結果の名前を元のファイル名に戻します。次の方法では、ファイルをコピーし、出力ファイルオブジェクトを正しい行のブロックに出力します。これにより、ブロックは新しい行を出力できます。

def insert_lines_following_line file, line_no 
    tmp_fn = "#{file}.tmp" 
    File.open(tmp_fn, 'w') do |outf| 
    line_ct = 0 
    IO.foreach(file) do |line| 
     outf.print line 
     yield(outf) if line_no == (line_ct += 1) 
    end 
    end 
    File.rename tmp_fn, file 
end 

insert_lines_following_line("#{curDir}/Backup_Times.csv", 1) do |outf| 
    # output new csv lines in this block 
    outf.puts ['foo','bar','baz',1,2,3].join(",") # or however you build your csv line 
end 
関連する問題