Command Line Progress Bar
I frequently need a progress bar for applications, in order to visualize what is going on in the application. Following is a simple progress bar implemented in three different languages, C++, Clojure and Java.
[================> ] 33%
They all look the same, just call the appropriate function with the percentage to show.
C++,
void printProgBar( int percent ){ std::string bar; for(int i = 0; i < 50; i++){ if( i < (percent/2)){ bar.replace(i,1,"="); }else if( i == (percent/2)){ bar.replace(i,1,">"); }else{ bar.replace(i,1," "); } } std::cout<< "\r" "[" << bar << "] "; std::cout.width( 3 ); std::cout<< percent << "% " << std::flush; }
Clojure,
Tom Hicks in the comments provided a more elegant version than mine, by computing the sequences of characters that we need directly.
(defn print-progress-bar [percent]
(let [bar (StringBuilder. "[")]
(doseq [i (range 50)]
(cond (< i (int (/ percent 2))) (.append bar "=")
(= i (int (/ percent 2))) (.append bar ">")
:else (.append bar " ")))
(.append bar (str "] " percent "% "))
(print "\r" (.toString bar))
(flush)))
Java,
public static void printProgBar(int percent){ StringBuilder bar = new StringBuilder("["); for(int i = 0; i < 50; i++){ if( i < (percent/2)){ bar.append("="); }else if( i == (percent/2)){ bar.append(">"); }else{ bar.append(" "); } } bar.append("] " + percent + "% "); System.out.print("\r" + bar.toString()); }