2011-04-12 33 views
0

我已經開始學習Ruby,並且遇到了一個煩人的問題。我已經將一個文本文件導入到我的程序中,我想遍歷它中的行並將它們打印到屏幕上。在打印出文件中的行時,Ruby控制檯會覆蓋行。

當我這樣做時,控制檯將覆蓋最後打印出的一行並將新的一行寫在最上面。爲什麼會發生這種情況,我該如何解決它?

這裏是我的代碼:

passwords = File.open('C:\Users\Ryan\Desktop\pw.txt', 'r') 
lines = passwords.gets 

for line in lines 
    puts line 
end 

更新: 的循環作用很奇怪。我把一個睡眠聲明放入它,它所做的只是睡眠一次,然後繼續輸出這些行。在輸出每行之前,我會預期它會睡眠。下面的示例:

passwords.each do |line| 
    sleep 1 
    puts line.chomp 
end 

更新2: 我剛剛創建了一個新的文本文件,並鍵入一些隨機的東西,把它用於測試和它工作正常。看起來像原始文件有一些不好的字符/編碼,打印到控制檯。

+0

首先以最少的步驟分離繁殖。你需要閱讀一個文件嗎?如果你只是放一串字符串呢?刪除多餘的步驟。 – 2011-04-13 00:03:51

+0

@Rein好吧,這與一個正常的數組。必須與它作爲一個文件有關。 – Ryan 2011-04-13 00:06:50

+1

作爲評論,你不應該在ruby中使用for-in循環。你想要做'lines.each do | line |' – 2011-04-13 00:10:41

回答

0

最後我發現文本文件是我的問題的原因。我創建了一個具有相同內容的新內容,並開始按我的意圖工作。

0
File.open('C:\Users\Ryan\Desktop\pw.txt') do |line| 
    while not line.eof? 
    puts line.readline.chomp 
    end 
end 

File.read("file").each { |line| puts line.chomp } 
+0

控制檯仍然覆蓋。 – Ryan 2011-04-12 23:55:03

+0

這會打開文件而不關閉它。 – 2011-04-13 00:03:04

+0

@Rein,以塊的形式,它的確如此。 – kurumi 2011-04-13 00:16:40

1

你有一個EOL(AKA結束線)的問題?嘗試:

passwords = File.open('C:\Users\Ryan\Desktop\pw.txt', 'r') 
lines = passwords.gets 
lines.each { |line| puts line.chomp } 
passwords.close 

chomp呼叫將去掉所有\n\r,或\r\n行尾,然後puts將追加天然EOL。

+0

讓我們不要永久性地使用'#gets'並且不能關閉文件描述符。爲什麼不使用'File.readlines'? – 2011-04-13 00:19:56

+0

+1。賠率是好的線結束需要「正常化」,在這種情況下,這意味着扔掉。 – 2011-04-13 00:21:32

+0

問題仍然存在。 – Ryan 2011-04-13 00:27:26

相關問題