fileSearch / filesSearch 函数

语法

  • string fileSearch(searchQuery)
  • string[] filesSearch(searchQuery)

参数

  1. searchQuery - string
    要在工作空间中的所有文件上应用的搜索查询。 请参阅搜索查询

返回

按字母顺序排序的列表,包含工作空间中与 searchQuery 匹配的所有文件。

  • fileSearch 将返回一个字符串列表,每个条目都以“;”(分号)结尾。
  • filesSearch 将返回字符串数组。

描述

fileSearchfilesSearch 函数可列出工作空间中的所有文件,工作空间会将其绝对路径与 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;文件路径包含空格字符的查询需要特殊处理。

通配符

支持常见的通配符字符 '*'(星号字符)和 '?'(问号)。 星号可以替代任意系列的字符(包括无字符),问号可以替代任意单个字符。

正则表达式

正则表达式允许复杂的字符串模式描述。 本手册不涵盖有关正则表达式的全面介绍,相关信息请参考其他来源,例如 WikipediaOpen 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”子文件夹中的所有文件均匹配。

用于选择特定字符的正则表达式,第 1 部分

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]

可使用空白字符合并两个或多个查询。 在这里,文件必须与工程名称和文件扩展名匹配。