OpenSCAD 使用者手冊/字串函式
外觀
將所有引數轉換為字串並連線。
用法示例
number=2;
echo ("This is ",number,3," and that's it.");
echo (str("This is ",number,3," and that's it."));
結果
ECHO: "This is ", 2, 3, " and that's it." ECHO: "This is 23 and that's it."
這可以用於將數字簡單地轉換為字串
s = str(n);
[注意: 需要版本2015.03]
將數字轉換為包含具有相應程式碼的字元的字串。OpenSCAD 使用 Unicode,因此數字被解釋為 Unicode 程式碼點。超出有效程式碼點範圍的數字將生成空字串。
引數
- chr(Number)
- 如果程式碼點有效,則將一個程式碼點轉換為長度為 1 的字串(位元組數取決於 UTF-8 編碼)。
- chr(Vector)
- 將引數向量中給出的所有程式碼點轉換為字串。
- chr(Range)
- 將範圍引數產生的所有程式碼點轉換為字串。
示例
echo(chr(65), chr(97)); // ECHO: "A", "a"
echo(chr(65, 97)); // ECHO: "Aa"
echo(chr([66, 98])); // ECHO: "Bb"
echo(chr([97 : 2 : 102])); // ECHO: "ace"
echo(chr(-3)); // ECHO: ""
echo(chr(9786), chr(9788)); // ECHO: "☺", "☼"
echo(len(chr(9788))); // ECHO: 1
注意:當與 echo() 一起使用時,字元程式碼大於 127 的控制檯輸出取決於平臺。
[注意: 需要版本2019.05]
將字元轉換為表示Unicode 程式碼點的數字。如果引數不是字串,則ord()返回undef。
引數
- ord(String)
- 將給定字串的第一個字元轉換為 Unicode 程式碼點。
示例
echo(ord("a"));
// ECHO: 97
echo(ord("BCD"));
// ECHO: 66
echo([for (c = "Hello! 🙂") ord(c)]);
// ECHO: [72, 101, 108, 108, 111, 33, 32, 128578]
txt="1";
echo(ord(txt)-48,txt);
// ECHO: 1,"1" // only converts 1 character
返回文字中的字元數。
echo(len("Hello world")); // 11
search() 用於文字搜尋。
函式 is_string(value) 如果 value 是字串,則返回 true,否則返回 false
echo(is_string("alpha")); //true
echo(is_string(22)); //false
為了補充本機函式,您可以定義自己的函式,以下是一些建議
//-- Lower case all chars of a string -- does not work with accented characters
function strtolower (string) =
chr([for(s=string) let(c=ord(s)) c<91 && c>64 ?c+32:c]);
//-- Replace char(not string) in a string
function char_replace (s,old=" ",new="_") =
chr([for(i=[0:len(s)-1]) s[i]==old?ord(new):ord(s[i])]);
//-- Replace last chars of a string (can be used for file extension replacement of same length)
function str_rep_last (s,new=".txt") =
str(chr([for(i=[0 :len(s)-len(new)-1])ord(s[i])]),new);
//-- integer value from string ----------
//Parameters ret and i are for function internal use (recursion)
function strtoint (s, ret=0, i=0) =
i >= len(s)
? ret
: strtoint(s, ret*10 + ord(s[i]) - ord("0"), i+1);
這裡要注意使用 chr() 從由其 ASCII 程式碼定義的未知數量的字元重新組合字串。這避免了在列表管理出現之前所需的遞迴模組使用。