2017-08-21 55 views
2

如何在gnuplot中將字符串轉換爲小寫?
這是一個gnuplot字符串處理問題。gnuplot - 將字符串變量轉換爲小寫

實施例: - 我希望通過接受 「歐姆」, 「歐姆」,或 「OHMS」 在gnuplot的腳本來檢查用戶鍵入參數....

if (tolower(ARG2) == "ohms") {..... 

如此。

優先選擇是不需要使用外部「系統」命令,以便腳本更具可移植性。我目前最好的解決辦法是

arg2 = system("awk 'BEGIN { print toupper(\"".ARG2."\") }'") 

,然後測試新的字符串變量「ARG2」,但AWK(或其他程序)可能不是普遍提供的非UNIX系統上,使gnuplot的腳本的可移植性。

我看不到任何增強的gprintf%格式說明符來修改字符串表示 - 看起來gprintf僅用於轉換值。

+0

在我的Ubuntu,'awk'是不能夠上/下非ASCII字母。你是否試圖檢查一個字符串是否包含Bash中的子字符串? –

+0

試試['if [[$ {ARG2 ,,} ==「ohms」]];然後 \t echo YES; fi'](https://ideone.com/9FsuTg) –

+0

或'arg2 = system(「$ {ARG2 ,,}」)' –

回答

0

當希望將與案例無關的字符串變量與已知字符串常量進行比較時,只需要轉換一部分字符。這不是gnuplot中大小寫轉換的一般情況的答案,但可能適用於許多情況。

arg2 = ARG2 
# As we want limited comparisons strstrt(」string」, 」key」) can be used.... 
# Substitute the first occurrence of a character [pat], with another character [repl] 
# Can be used to convert an expected word's case, one character at a time 
subchr(src, pat, repl) = strstrt(src, pat)?src[*:strstrt(src, pat)-1].repl.src[strstrt(src, pat)+1:*]:src 
arg2 = subchr(arg2, "o", "O") 
arg2 = subchr(arg2, "h", "H") 
arg2 = subchr(arg2, "m", "M") 
arg2 = subchr(arg2, "s", "S") 
arg2 = subchr(arg2, "d", "D") 
arg2 = subchr(arg2, "b", "B") 
if (arg2[1:2] eq "DB") { 
    # In terms of dB 
    ..... 
    } 
else { 
    if (arg2 eq "OHMS") { 
    ..... 
    } 
    } 

的解決方案是寫一個gnuplot的字符串功能subchr()它取代一個單一匹配字符,僅當發現(三元?),並把它稱爲用於每個字符的轉換。幸運的是,gnuplot字符串範圍說明符在(0)和之後(stringlength + 1)之前進行索引時表現得很好,對該區域返回null。這使我們能夠在每個角色升級後返回字符串。

這避免了對系統的需求()調用如awk程序等