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 代码定义的未知数量的字符重新组合字符串。这避免了在列表管理出现之前所需的递归模块使用。