2015-03-03 92 views
5

我正試圖在Rust中打印到stdout中的狀態指示器。在其他語言中,我使用了一個清除當前stdout行而不改變其他語言的函數。我似乎無法找到一個Rust等價物。有一個嗎?下面是我要找的如何清除stdout的當前行?

for i in 0..1000 { 
    stdio::print(format!("{}", i).as_slice)); 
    stdio::clear(); 
} 
+0

你在哪個平臺上?你在想什麼其他語言的相應功能? – 2015-03-03 17:14:35

回答

5

在ANSI終端上(幾乎除Windows上的命令提示符以外的所有內容),\r將光標返回到當前行的開頭,允許您在其上寫入其他內容(新內容或空白字符以清除您的內容已經寫了)。

print!("\r") 

標準庫中沒有任何東西可用於以平臺無關的方式執行此操作。

0

利用退格鍵的ASCII碼的一個小例子是一個選項,例如:

print!("12345"); 
print!("{}", (8u8 as char)); 

這最終將輸出「1234」後的5由於打印退格字符(ascii code 8)而被刪除。奇怪的是,Rust並不認爲\ b是一個有效的字符轉義。

+1

''你會退格。 Rust並不認爲'\ b'是一個有效的轉義,一點也不奇怪;它不是絕對標準的逃跑之一,儘管它很常見。 – 2015-03-03 06:07:18

2

cli是一個箱子(docs),它似乎很好地解決了這個問題。它還附帶一些其他常見的好東西,如進度條和樣式提示。

cli::clear應該是你想要的功能。

使用類似重複的主要困難:

println!("\r"); 

的是,這會不會是在使用CLI跨操作系統兼容::清楚應該只要有問題的OS支持。在這裏使用cli箱子的另一個好處是,它是一個更高層次的抽象,以清晰的方式傳達您的實際含義。

您想清除終端。

您不想重複獲得回車。

還有其他的例程在這裏類似的東西。即進度條,這是你正在努力解決的問題。