2017-08-21 10 views
0

メモスクリプトを少し書いていて、実行してテストした後、ファイルに出力されません。何も変わらないので問題を解決します。ファイルは作成されますが、空のままです。Rubyはファイルに書き込みませんが、エラーは表示されません

require 'ruby-progressbar' 
puts "Loading..." 
lt = ProgressBar.create 
if File.directory?("./memos") == false 
    lt.progress = 50 
    Dir.mkdir("memos") 
    lt.progress = 100 
end 
lt.progress = 100 
Dir.chdir("memos") 
puts "Welcome to Eternal Memorizer." 
loop do 
    progress = ProgressBar.create 
    progress.log "Getting files..." 
    progress.progress = 50 
    cdf = Dir.glob("**/*") 
    progress.progress = 100 
    puts "Memos:" 
    puts cdf 
    puts "" 
    puts "[M]ake memo, [R]ead memo, [D]elete memo." 
    op = gets.chomp 
    if op.downcase == "m" 
     print "Memo name: " 
     nam = gets.chomp 
     puts "\nText, Press enter to finish:" 
     txt = gets.chomp 
     num = txt.length 
     txt = txt.split('') 
     ggg = ProgressBar.create(:title => "Saving...", :total => num) 
     o = File.open("#{nam}.mem", 'w+') 
     i = 0 
     ggg.log "Writing #{txt.join}" 
     num.times do 
      puts txt 
      #sleep(30) 
      o.write("#{txt[i]}") 
      i += 1 
      ggg.increment 
      ggg.title = "#{txt[i]}" 
      #system("cls"); system("clear") 
     end 
    elsif op.downcase == "r" 
     puts "Which memo to open?" 
     fil = gets.chomp 
     begin 
      fil = File.open("#{fil}", 'r+') 
      puts "\n-=-=-=-" 
      puts fil.read 
      puts "-=-=-=-\n" 
     rescue 
      puts "Err, unable to open file." 
     end 
    elsif op.downcase == "d" 
     puts "Which memo to delete?" 
     File.delete(gets.chomp) 
    end 
end 

私が読んで、それを再読み込み、そしてそれは私がそれをあきらめてポイントを打つだけですので、エラーが発見された場合、それは大きな助けになると思いました。

+0

これらの変数名は、多くのものが必要です。なぜ彼らに3通の手紙を書いていることに夢中なのか?名前は最小限にする必要がありますが、説明的です。 'fil'のように' file'という文字が1文字だけ長いときは混乱します。 – tadman

+0

また、 'case op.downcase'のように' case'を使い、単に 'm 'を使うのを学ぶべきです。同じことを繰り返してダウンケージするよりもずっと少ないコードで、ずっと効率的です。 – tadman

答えて

1

ファイルへの書き込みが完了したら、手動でファイルを閉じます。

o.close 

これはディスクにコミットする必要があります。

またはファイルのクローズを処理するブロック形式File.openを使用してください。

File.open("#{nam}.mem", 'w+') do |o| 
    i = 0 
    ggg.log "Writing #{txt.join}" 
    num.times do 
     puts txt 
     #sleep(30) 
     o.write("#{txt[i]}") 
     i += 1 
     ggg.increment 
     ggg.title = "#{txt[i]}" 
     #system("cls"); system("clear") 
    end 
end 
+0

これはうまくいっていますが、私の他のコーディングプロジェクトはそれを書いただけで、私はそれを閉じることを心配する必要はありませんでした。 – Pixelz

+1

@Pixelz:ナー、あなたは__always__を閉じる必要があります。しかし時にはシステムがそれを閉じます。 –

+0

笑一度私はそれが私のルールを変更する深刻なプログラムを作る。 – Pixelz

関連する問題