语法
- string fileSearch(searchQuery)
- string[] filesSearch(searchQuery)
参数
- searchQuery - 字符串要在工作空间中的所有文件上应用的搜索查询。 请参阅搜索查询。
返回
按字母顺序排序的列表,包含工作空间中与 searchQuery 匹配的所有文件。
- fileSearch 将返回一个字符串列表,每个条目都以“;”(分号)结尾。
- filesSearch 将返回字符串数组。
描述
fileSearch 和 filesSearch 函数可列出工作空间中的所有文件,工作空间会将其绝对路径与 searchQuery 进行匹配。 搜索查询相对于当前工程(即当前规则文件所在的工程),当 searchQuery 基于绝对工作空间路径时除外(即以斜线 ("/") 或通配符(* 或 ?)开头)。 匹配算法的伪代码:
result = ""
for all open projects in workspace :
if project == current project:
result += all matching files in project, relative to assets folder
result += all matching files in project, relative to project folder
fi
result += all matching files in project, relative to workspace root
sort result
end
搜索查询
CityEngine 具有高级搜索查询功能,支持通配符、正则表达式以及文件类型等文件属性。 将使用查询过滤工作空间中的所有文件并返回绝对工作空间路径。 空白字符表示 AND;文件路径包含空格字符的查询需要特殊处理。
通配符
支持常见的通配符字符 '*'(星号字符)和 '?'(问号)。 星号可以替代任意系列的字符(包括无字符),问号可以替代任意单个字符。
正则表达式
正则表达式允许复杂的字符串模式描述。 本手册不涵盖有关正则表达式的全面介绍,相关信息请参考其他来源,例如 Wikipedia 或 Open Group 的规范。
正则表达式以 '$' 为开头。 如果 searchQuery 为正则表达式,一定要将 '$' 用作第一个字符。 请注意,对于正则表达式,通配符 "*" 和 "?" 的语义会发生变化。 "*" 会匹配前置元素零次或多次,因此使用 ".*" 可模拟“匹配任意值”行为。
空白字符
由于空白字符表示 AND,因此需要将包含实际空格的搜索查询放入单引号中。 例如,
filesSearch("'facade pictures/greek style *.png'")
或者,可以使用“\s”或“\x20”在正则表达式中转义空格:
filesSearch("$facade\\spictures/greek\\sstyle\\s.*.png")
注意双反斜线 - 这是必需的,因为 CGA 编译器在编译时也会解释“\”字符。
文件属性
可以查询以下属性:
- 名称:文件名
- 扩展名:文件扩展名
- 工程:工程名称
- 路径:文件路径
相关内容
示例
在以下示例中,我们使用包含两个工程和数个文件的工作空间。 示例位于 rule.cga 中,即 MyProject 为当前工程。
通配符
filesSearch("*.png") [/MyProject/assets/textures/1.png,
/MyProject/assets/textures/2.png,
/MyProject/assets/textures/4.png,
/MyProject/assets/tower.png,
/OtherProject/assets/glass.png]
由于搜索查询以星号开头,因此所有工程均包含在搜索中。
filesSearch("?.png") []
当前工程的根目录中或资产目录中没有名称为字符 1 的 png 文件。
filesSearch("*/?.png") [/MyProject/assets/textures/1.png;
/MyProject/assets/textures/2.png,
/MyProject/assets/textures/4.png]
由于存在前导星号,将在所有文件夹中搜索名称为字符 1 的 png 文件。
filesSearch("textures/*") [/MyProject/assets/textures/1.png,
/MyProject/assets/textures/2.png,
/MyProject/assets/textures/4.png]
当前工程中资产文件夹的“textures”子文件夹中的所有文件均匹配。
用于选择特定字符的正则表达式
filesSearch("$[12].png") []
当前工程的根目录中或资产目录中没有名称为“1”或“2”的 png 文件。
用于选择特定字符的正则表达式,第 2 部分
filesSearch("$textures/[12].png") [/MyProject/assets/textures/1.png,
/MyProject/assets/textures/2.png]
当前工程中资产文件夹的“textures”子文件夹中名称为“1”或“2”的所有 png 文件均匹配。
正则表达式 + 通配符
filesSearch("$.*/[12].png") [/MyProject/assets/textures/1.png,
/MyProject/assets/textures/2.png]
名称为“1”或“2”的所有 png 文件均匹配。 请注意星号前面的句点。
用于选择一系列字符的正则表达式
filesSearch("$textures/[2-5].png") [/MyProject/assets/textures/2.png,
/MyProject/assets/textures/4.png]
当前工程中资产文件夹的“textures”子文件夹中名称为“2”、“3”、“4”或“5”的所有 png 文件均匹配。
正则表达式 + OR
filesSearch("$textures/[12].png|.*.obj") [/MyProject/assets/textures/1.png,
/MyProject/assets/textures/2.png,
/MyProject/assets/tower.obj,
/OtherProject/assets/brick.obj]
当前工程中资产文件夹的“textures”子文件夹中名称为“1”或“2”的所有 png 文件以及工作空间中的所有 obj 文件均匹配。
文件属性
filesSearch("Name=1.png") [/MyProject/assets/textures/1.png]
只有一个文件与该名称完全匹配。
文件属性,AND
filesSearch("Project=OtherProject Ext=obj")[/OtherProject/assets/brick.obj]
可使用空白字符合并两个或多个查询。 在这里,文件必须与工程名称和文件扩展名匹配。