VEX —— Functions|String

目录

strlen —— 返回字符串长度

concat —— 连接字符串

join —— 以指定间隔连接字符串数组内字符串

startswith —— 检测字符串是否以指定的字符串开始

endswith —— 检测字符串是否以指定的字符串结尾

isalpha —— 判断字符串是否全是字母

isdigit —— 判断字符串是否全是数字

itoa —— 将整数转化为字符串

toupper —— 转化为大写

tolower —— 转化为小写

strip —— 移除字符串前导和尾随的指定字符

lstrip —— 移除字符串前导的指定字符

rstrip —— 移除字符串尾随的指定字符

opdigits —— 返回字符串末尾最后的数字

pluralize —— 将英文名词转化为复数

titlecase —— 返回标题格式


find —— 在字符串或数组中查找元素

match —— 判断字符串是否匹配样本

replace —— 用新字符串替换匹配老的字符串

replace_match —— 用新字符串样本替换匹配老的字符串样本

split —— 拆分字符串

splitpath —— 将文件路径拆分为目录和文件名

re_find —— 正则表达式匹配字符串

re_findall —— 正则表达式匹配字符串所有实例

re_match —— 匹配整个字符串

re_replace —— 替代匹配的字符串

re_split —— 拆分匹配的字符串

abspath —— 返回文件的完全路径

relpath —— 返回文件的相对当前houdini工作路径

relativepath —— 计算从src到dest的相对路径


chr —— 将Unicode转化为UTF8字符串

ord —— 将UTF8字符串转化为Unicode

encode —— 将字符串编码为有效的变量名

decode —— 对编码的变量名进行解码

encodeattrib —— 将字符串编码为有效的几何体属性名

decodeattrib —— 对编码的几何体属性名进行解码

encodeparm —— 将字符串编码为有效的几何体参数名

decodeparm —— 对编码的节点参数名进行解码

encodeutf8 —— 编码UTF8字符串

decodeutf8 —— 解码UTF8字符串

makevalidvarname —— 强制将字符串转化为符合变量名规则

sprintf —— 格式化输出字符串


strlen —— 返回字符串长度

int strlen(string string)

concat —— 连接字符串

string concat(string s1, string s2, ...)
string path[] = {'C:', 'Users', 'Administrator', 'Desktop'};

s@ret;
foreach(string s; path)
    if (len(@ret))
        @ret = concat(@ret, '/', s);
    else
        @ret = concat(@ret, s);

join —— 以指定间隔连接字符串数组内字符串

string join(string s[], string spacer)
string path[] = {'C:', 'Users', 'Administrator', 'Desktop'};
s@ret = join(path, '/');

startswith —— 检测字符串是否以指定的字符串开始

int startswith(string str, string startswith)

endswith —— 检测字符串是否以指定的字符串结尾

int endswith(string haystack, string needle)

isalpha —— 判断字符串是否全是字母

int isalpha(string str)

isdigit —— 判断字符串是否全是数字

int isdigit(string str)

itoa —— 将整数转化为字符串

string itoa(int number)
  • atof,字符串转化为浮点;
  • atoi,字符串转化为整数;

toupper —— 转化为大写

string toupper(string str)

tolower —— 转化为小写

string tolower(string str)

strip —— 移除字符串前导和尾随的指定字符

string strip(string value)
string strip(string value, string whitespace)
s@path = "C:/Users/Administrator/Desktop/";
s@ret = strip(@path, '/');  

lstrip —— 移除字符串前导的指定字符

string lstrip(string value)
string lstrip(string value, string whitespace)

rstrip —— 移除字符串尾随的指定字符

string rstrip(string value)
string rstrip(string value, string whitespace)

opdigits —— 返回字符串末尾最后的数字

int opdigits(string str)
int opdigits()
opdigits("/obj/geo34/box21") - returns 21
opdigits("/obj/geo34/box") - returns 34
opdigits("/obj/geo34/box2.1") - returns 1 (“.” is not a digit)

pluralize —— 将英文名词转化为复数

string pluralize(string noun)
string boxes = pluralize("box"); //boxes
string women = pluralize("woman"); //women
string geometries = pluralize("geometry"); //geometries
string phrase = pluralize("Pluralize the last word"); //Pluralize the last words

titlecase —— 返回标题格式

string titlecase(string str)
  • 始终大写第一个和最后一个单词;
  • 副标题大写;
  • 除冠词、介词和连词以外的所有单词大写;
  • 大写的连字符单词的第二部分也应大写;
  • 已包含大写字母的单词不修改;

find —— 在字符串或数组中查找元素

int find(string haystack, string needle)
int find(string haystack, string needle, int start)
int find(string haystack, string needle, int start, int end)
​int [] find(string haystack, string needle)
int [] find(string haystack, string needle, int start)
int [] find(string haystack, string needle, int start, int end)
int find(<type>array[], <type>target)
int find(<type>array[], <type>target, int start)
int find(<type>array[], <type>target, int start, int end)
int [] find(<type>array[], <type>target)
int [] find(<type>array[], <type>target, int start)
int [] find(<type>array[], <type>target, int start, int end)
s@path = "C:/Users/Administrator/Desktop";
i@ret1 = find(@path, '/'); //2
i[]@ret2 = find(@path, '/'); //[ 2, 8, 22 ]
i[]@arr = {1,2,3,5,4,2};
i@ret1 = find(@arr, 2); //1
i[]@ret2 = find(@arr, 2); //[ 1, 5 ] 

match —— 判断字符串是否匹配样本

int match(string pattern, string subject)
  • ?,匹配任何字符;
  • *,匹配任何子字符串;
  • [list],匹配任何指定的字符;
  • ^,排除匹配的样本;
i@ret1 = match('ab?d', 'abcd');
i@ret2 = match('ab*d', 'abccd');
i@ret3 = match('ab[abc]d', 'abad');
i@ret4 = match('ab*d,^abcd', 'abcd');

replace —— 用新字符串替换匹配老的字符串

string replace(string str, string old, string new)
string replace(string str, string old, string new, int count)

replace_match —— 用新字符串样本替换匹配老的字符串样本

string replace_match(string str, string pattern_from, string pattern_to)
// Returns "carol is my name";
string s = replace_match("bob is my name", "bob*", "carol*");

// Returns "a-b";
s = replace_match("a_to_b", "*_to_*", "*-*");

// Swaps the matched wildcards, returning "b_to_a";
s = replace_match("a_to_b", "*_to_*", "*(1)_to_*(0)");

split —— 拆分字符串

string [] split(string s)
string [] split(string s, string separators)
string [] split(string s, string separators, int maxsplits)
//默认是以空格拆分
s@path = "C:/Users/Administrator/Desktop";
s[]@ret = split(@path, '/');  

splitpath —— 将文件路径拆分为目录和文件名

void splitpath(string fullpath, string &dir, string &name)
s@path = "C:/Users/Administrator/Desktop";
s@dir;s@name;
splitpath(@path, @dir, @name); 

re_find —— 正则表达式匹配字符串

//如regex匹配input,返回1
int re_find(string regex, string input)
int re_find(string regex, string input, int start)
int re_find(string regex, string input, int start, int end)
//如regex匹配input,返回首个子集
string re_find(string regex, string input)
string re_find(string regex, string input, int start)
string re_find(string regex, string input, int start, int end)
//如regex匹配input,返回1,并输出匹配的首尾位置
int re_find(int &start_pos[], int &end_pos[], string regex, string input)
int re_find(int &start_pos[], int &end_pos[], string regex, string input, int start)
int re_find(int &start_pos[], int &end_pos[], string regex, string input, int start, int end)
//如regex匹配input,返回子集的数组
string [] re_find(string regex, string input)
string [] re_find(string regex, string input, int start)
string [] re_find(string regex, string input, int start, int end)
s@path = "C:/Users/Administrator/Desktop";

i@ret1 = re_find('/[a-zA-Z_]*', @path); //1

s@ret2 = re_find('/[a-zA-Z_]*', @path); // /Users

i[]@start;i[]@end;
i@ret3 = re_find(@start, @end, '/[a-zA-Z_]*', @path); 

s[]@ret4 = re_find('/[a-zA-Z_]*', @path); //[ /Users ]

re_findall —— 正则表达式匹配字符串所有实例

string [] re_findall(string regex, string input)
string [] re_findall(string regex, string input, int start)
string [] re_findall(string regex, string input, int start, int end)
s@path = "C:/Users/Administrator/Desktop";
s[]@ret4 = re_findall('/[a-zA-Z_]*', @path); //[ /Users, /Administrator, /Desktop ]

re_match —— 匹配整个字符串

int re_match(string regex, string input)
s@path = "C:/Users/Administrator/Desktop";
i@ret = re_match("[a-zA-Z]:[a-zA-Z/]+?", s@path); //1

re_replace —— 替代匹配的字符串

string re_replace(string regex, string replacement, string input, int maxreplace=0)
s@path = "C:/Users/Administrator/Desktop";
s@ret = re_replace("[a-zA-Z]:", "D:", s@path); //D:/Users/Administrator/Desktop

re_split —— 拆分匹配的字符串

string [] re_split(string regex, string input, int maxsplits=0)
s@path = "C:/Users/Administrator/Desktop";
s[]@ret = re_split("/[a-zA-Z]", s@path); //[ C:, sers, dministrator, esktop ]

abspath —— 返回文件的完全路径

string abspath(string relpath)
s@path = "../Administrator/Desktop";
s@ret = abspath(@path); //C:/Users/Administrator/Desktop

relpath —— 返回文件的相对当前houdini工作路径

string relpath(string abspath)
s@path = "C:/Users/Administrator/Desktop";
s@ret = relpath(@path); //./Desktop

relativepath —— 计算从src到dest的相对路径

string relativepath(string src, string dest)
s@ret = relativepath("/obj/geo1/box", "/obj/ropnet1/mantra1") ; 
//../../ropnet1/mantra1

chr —— 将Unicode转化为UTF8字符串

string chr(int value)
//将整数转换为对应的 ASCII 字符
string ret;
for(int i=65; i<=90; i++){
    append(ret, chr(i));
}  
printf(ret); //ABCDEFGHIJKLMNOPQRSTUVWXYZ

ord —— 将UTF8字符串转化为Unicode

int ord(string value)
string s = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

int ret[];
foreach(string sub; s){
    append(ret, ord(sub));
} 
printf('%g', ret); //{65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90}

encode —— 将字符串编码为有效的变量名

string encode(string str)
  • vex变量名只许包含字母、数字和下划线,且不得以数字开头;
  • 此函数可将非法字符转化为合法字符,且可使用decode恢复,对合法的不修改;
  • 例外,以xn__开头的即使有效也会编码,是因为xn_是用于标识编码字符串的前缀;
s@ret1 = encode('/a?'); //xn__a_wca3c
s@ret2 = encode('xn__a'); //xn__xn__a_

decode —— 对编码的变量名进行解码

string decode(string str)
string s = encode('/a?'); //xn__a_wca3c
s@ret2 = decode(s); // /a?

encodeattrib —— 将字符串编码为有效的几何体属性名

string encodeattrib(string str)
  • 几何体属性和组名只许包含字母、数字和下划线,且不得以数字开头;
  • 此函数可将非法字符转化为合法字符,且可使用decodeattrib恢复,对合法的不修改;
  • 例外,以xn__开头的即使有效也会编码,是因为xn_是用于标识编码字符串的前缀;

decodeattrib —— 对编码的几何体属性名进行解码

string decodeattrib(string str)

encodeparm —— 将字符串编码为有效的几何体参数名

string encodeparm(string str)
  • 参数名只许包含字母、数字、哈希字符(用于多参数)和下划线,且不得以数字开头;
  • 此函数可将非法字符转化为合法字符,且可使用decodeparm恢复,对合法的不修改;
  • 例外,以xn__开头的即使有效也会编码,是因为xn_是用于标识编码字符串的前缀;

decodeparm —— 对编码的节点参数名进行解码

string decodeparm(string str)

encodeutf8 —— 编码UTF8字符串

string encodeutf8(int codepoints[])

将一系列代码点转换为UTF8字符串;

默认,vex将其字符串视为UTF8,但这意味着对字符串进行索引可能会有异常行为;

生成代码点可确保每个逻辑字符都有一个索引;

int codepoints[] = {65, 66, 67};
s@ret1 = encodeutf8(codepoints); //ABC
i[]@ret2 = decodeutf8(@ret1); //[ 65, 66, 67 ]

decodeutf8 —— 解码UTF8字符串

int [] decodeutf8(string str)

makevalidvarname —— 强制将字符串转化为符合变量名规则

string makevalidvarname(string name)
string makevalidvarname(string name, string safe_chars)
  • vex等语言变量名只允许包含字母、数字和下划线,并且不得以数字开头;
  • houdini内的节点名和属性名有类似的要求;
  • 此函数通过下划线替换无效的字符;
// Returns "foo_bar"
string s = makevalidvarname("foo:bar");

// Returns "_123"
s = makevalidvarname("123");

// Returns "foo:_bar"
s = makevalidvarname("foo:?bar", ":");

sprintf —— 格式化输出字符串

  • 类似printf(打印到屏幕);
string sprintf(string format, ...)
s@s = sprintf("texture%04d.exr", @Frame); //texture0001.exr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值