2013-11-02 55 views
-1

我想寫一個簡單的命令行程序,讓我跟蹤研究會議期間多少次分心。用時間戳命名新文件?

我在運行此代碼時說我的file.open具有無效參數時出現參數錯誤。如果我想用時間戳命名每個new_session文件,那麼簡單的解決方案是什麼?

def first_question 
    puts "Would you like to start a new session?" 
    answer = gets.chomp 
    answer = answer.downcase 

    if answer == "yes" 
     new_session 
    else 
     puts "Ok. Would you like to review a previous session?" 
     prev_session = gets.chomp 
     prev_session.downcase 
     if prev_session == "yes" 
      #GET AND REVIEW PREVIOUS SESSIONS 
     elsif prev_session == "no" 
      puts "Well if you don't want a new session, and you don't want to review your old sessions, then you're SOL." 
     else 
      "That's not an acceptable response." 
      first_question 
     end 
    end 
end 

def new_session 
    distractions = 0 
    d = File.open("Session"+Time.now.to_s , 'w'){|f| f.write(distractions) } 


    puts "What would you like to do (add track(s) or review tracks)?" 
    request = gets.chomp 
    request.downcase  
    if request == "add track" 
     distractions = distractions.to_i + 1 
     puts "You have #{distractions} tracks in this session." 
    elsif request == "add tracks" 
     puts "How many times have you been distracted since we last met?" 
     answer = gets.chomp 
     distractions = distractions.to_i + answer.to_i 
     puts "You have #{distractions} tracks." 
    elsif request == "review tracks" 
     puts distractions 
    end 
    File.open(d , 'w') {|f| f.write(distractions) } 
end 

first_question 
+0

有人能告訴我爲什麼這個值得downvotes而答案甚至不回答問題得到upvote? –

回答

0

你有兩個File.open聲明:

d = File.open("Session"+Time.now.to_s , 'w'){|f| f.write(distractions) } 

和:

File.open(d , 'w') {|f| f.write(distractions) } 

你的錯誤代碼會告訴你哪一個是錯的,但是,從看着他們,我會說這是第二個。

d將被分配的塊的結果對於第一File.open,這將是的f.write(distractions)結果:

File.open文檔說:

塊的值將是從File.open返回。

File.write文檔說:

返回寫入的字節數。

其結果是,你正在分配d的字節數,然後試圖創建一個文件,一個文件名的整數,這是一個錯誤,因爲文件名MUST是一個字符串。

這會導致更大的問題,也就是說,您的代碼沒有意義。

  • d = File.open("Session"+Time.now.to_s , 'w'){|f| f.write(distractions) }寫入0"Session"+Time.now.to_s創建的文件。
  • request.downcaserequest的內容轉換爲小寫並立即將其丟棄。也許你的意思request.downcase!,但它會更好寫:

    request = gets.chomp 
    request.downcase  
    

    由於:

    request = gets.chomp.downcase 
    
  • distractions = distractions.to_i + 1distractions已經是0這是一個Fixnum。您正在使用to_i將Fixnum轉換爲整數,然後向其中加1。簡單地做:

    distractions += 1 
    
  • distractions = distractions.to_i + answer.to_i應該是:

    distractions += answer.to_i 
    
  • File.open(d , 'w') {|f| f.write(distractions) },因爲它是試圖寫與整數名稱的文件,將不會更新您的原始文件。如果成功,它會寫入一個全新的文件,最終會覆蓋之前創建的文件,這是將一個0寫入磁盤的結果。相反,d應該是先前創建的文件的名稱。

考慮一下:

def new_session 

    distractions = 0 

    puts "What would you like to do (add track(s) or review tracks)?" 
    request = gets.chomp.downcase 

    case request 
    when "add track" 
    distractions += 1 
    puts "You have #{distractions} tracks in this session." 

    when "add tracks" 
    puts "How many times have you been distracted since we last met?" 
    distractions += gets.chomp.to_i 
    puts "You have #{distractions} tracks." 

    when "review tracks" 
    puts distractions 
    end 

    File.write("Session" + Time.now.to_s, distractions) 
end 

此代碼是清潔的,現在更有意義。

+0

對不起,我很新的這個。我試着實現你的改進方法,但在運行代碼時仍然收到無效的參數錯誤。 '錯誤號:: EINVAL' –

1

您的大部分代碼都是雜亂無章的。你指的是這個問題,不過,來自這裏:

d = File.open("Session"+Time.now.to_s , 'w'){|f| f.write(distractions) } 

d將被寫入到文件的字節的數量並由此一個Fixnum。你不能打開你想在函數的最後一行中做的Fixnum。

此外,

request = gets.chomp 
request.downcase 

這裏的第二行什麼也不做。

相關問題