2016-05-16 109 views
2

我試圖在一個紅寶石程序中使用我用artii製作的ascii藝術字符串。可以使用CLI預期生成的字符串:如何在ruby中顯示ascii藝術字符串?

enter image description here

然而,當我嘗試將其保存爲一個字符串,要麼putsp,或print它,這是行不通的。我認爲這可能是因爲斜槓需要逃脫,我試圖做,但它看起來像我不正確gsubing。我將如何從cli上的工作字符串轉到打印字符串到標準輸出的ruby程序中的工作字符串? enter image description here

banner = " 
    _____  _    _ _  _  
| __ \  | |   | \ | |  | |  
| |__) | _| |__ _ _ | \| | ___ | |_ ___ 
| _/| | | '_ \| | | | | . ` |/ _ \| __/ _ \ 
| | \ \ |_| | |_) | |_| | | |\ | (_) | |_ __/ 
|_| \_\__,_|_.__/ \__, | |_| \_|\___/ \__\___| 
        __/ |      
        |___/      

" 
print banner 
print banner.gsub(/\\/, "\\\\") 
puts "One slash: \\" 
puts "Two slashes: \\\\" 

回答

3

你不能gsub反斜槓,因爲他們不在那裏:你想unspill牛奶。語法"foo\ bar"將產生字符串"foo bar",就像反斜槓不在那裏一樣。這不是反斜槓不顯示 - 它從來沒有在字符串中,所以沒有什麼gsub。你有兩種基本的解決方案:要麼雙在你的文字反斜線用手或編輯替代("foo\\ bar")之前程序執行:

artii 'Ruby Note' | sed 's/\\/\\\\/g' 

或讀取的字符串中從某處所以它不是由紅寶石解釋語法:

banner = File.read(DATA) 
puts banner 
__END__ 
    _____  _    _ _  _  
| __ \  | |   | \ | |  | |  
| |__) | _| |__ _ _ | \| | ___ | |_ ___ 
| _/| | | '_ \| | | | | . ` |/ _ \| __/ _ \ 
| | \ \ |_| | |_) | |_| | | |\ | (_) | |_ __/ 
|_| \_\__,_|_.__/ \__, | |_| \_|\___/ \__\___| 
        __/ |      
        |___/      

將顯示您想要的。

+1

向右感謝Amadan!我用你的第一個建議,它完全奏效。只是擡起頭我認爲你的反撥和最後需要成爲一個單引號:) – mbigras

+1

是的,謝謝。編輯。 – Amadan

2

你也可以使用一個heredoc that disables interpolation and escaping

puts <<-'EOF' 
_____  _    _ _  _  
| __ \  | |   | \ | |  | |  
| |__) | _| |__ _ _ | \| | ___ | |_ ___ 
| _/| | | '_ \| | | | | . ` |/ _ \| __/ _ \ 
| | \ \ |_| | |_) | |_| | | |\ | (_) | |_ __/ 
|_| \_\__,_|_.__/ \__, | |_| \_|\___/ \__\___| 
        __/ |      
        |___/      
EOF