Show/Hide Toolbars

XSharp

结果模式

翻译指令中的 <resultPattern> 部分是预处理器在输入文本匹配 <matchPattern> 时生成的文本。 <resultPattern> 由以下一个或多个组件组成:

 

字面标记是直接写入结果文本的实际字符。
 

单词是 xBase 关键字和标识符,直接写入结果文本。

 

结果标记:直接引用匹配标记名称。通过结果标记将匹配标记匹配的输入文本写入结果文本。

 

以下表格列出了结果标记形式:

 

结果标记

名称

<idMarker>

常规结果标记

#<idMarker>

Dumb stringify 结果标记

<"idMarker">

普通字符串化结果标记

<(idMarker)>

智能字符串化结果标记

<{idMarker}>

块化结果标记

<.idMarker.>

逻辑化结果标记

<!idmarker!>

非空结果标记

 

常规结果标记:将匹配的输入文本写入结果文本,如果没有匹配的输入文本,则不写入任何内容。除非有特殊要求,否则请使用这个最通用的结果标记。您可以将其与任何匹配标记一起使用,但它几乎总是与常规匹配标记一起使用。

 

Dumb stringify 结果标记:将匹配的输入文本转换为字符串并写入结果文本。如果没有匹配的输入文本,则写入空字符串("")。如果匹配的输入文本是由列表匹配标记匹配的列表,则此结果标记将整个列表转换为字符串并写入结果文本。
 
这个结果标记将输出写入结果文本,其中始终需要一个字符串。这通常适用于命令,其中命令或子句参数被指定为文字值,但结果文本必须始终写入为字符串,即使参数未指定。

 

普通字符串化结果标记:将匹配的输入文本转换为字符串并写入结果文本。如果没有匹配的输入文本,则不向结果文本写入任何内容。如果匹配的输入文本是由列表匹配标记匹配的列表,则此结果标记将列表中的每个元素转换为字符串并写入结果文本。
 
普通字符串化结果标记通常与块化结果标记一起使用,用于编译表达式同时保存表达式的文本映像(请参阅 Std.ch 中的 SET FILTER 条件和 INDEX 键表达式)。

 

智能字符串化结果标记:仅在源文本被括号括起来时才将匹配的输入文本转换为字符串。如果没有匹配的输入文本,则不向结果文本写入任何内容。如果匹配的输入文本是由列表匹配标记匹配的列表,则此结果标记将列表中的每个元素(使用相同的字符串化规则)转换为字符串并写入结果文本。
 
智能字符串化结果标记专门设计用于支持除带有 <xlToggle> 参数的 SET 命令之外的其他命令的扩展表达式。扩展表达式是可以指定为文字文本或如果用括号括起来则作为表达式的命令语法元素。USE 命令的 <xcDatabase> 参数是一个典型示例。例如,如果 <xcDatabase> 参数的匹配输入是单词 Customer,则将其作为字符串 "Customer" 写入结果文本,但表达式 (cPath + cDatafile) 将不带引号地写入结果文本(即不带引号)。

 

块化结果标记:将匹配的输入文本作为代码块(不带任何参数)写入结果文本。例如,输入文本 x + 3 将被写入结果文本为 {|| x + 3}。如果没有匹配的输入文本,则不向结果文本写入任何内容。如果匹配的输入文本是由列表匹配标记匹配的列表,则此结果标记将列表中的每个元素块化。
 
块化结果标记与常规和列表匹配标记一起匹配各种表达式,并将其作为代码块写入结果文本。请记住,代码块是一段编译后的代码,稍后执行。这在定义每次调用时评估多次表达式的命令时很重要。在定义命令时,您可以使用代码块将表达式作为数据传递给函数和过程,而不是作为评估结果。这允许目标例程在必要时评估表达式。
 
在 Std.ch 中,块化结果标记定义了对每条记录评估表达式的数据库命令。通常,这些是字段或表达式列表、FOR 和 WHILE 条件,或者基于关键值执行操作的命令的关键表达式。

 

逻辑化结果标记:如果匹配任何输入文本,则向结果文本写入 true (.T.);否则,向结果文本写入 false (.F.)。此结果标记不会将输入文本本身写入结果文本。
 
逻辑化结果标记通常与受限匹配标记一起使用,如果指定了不带参数的可选子句,则向结果文本写入 true (.T.);否则,写入 false (.F.)。在 Std.ch 中,此公式定义了 USE 命令的 EXCLUSIVE 和 SHARED 子句。

 

非空结果标记:将匹配的输入文本写入结果文本,如果没有匹配的输入文本,则写入 NIL。如果将标记放在 IIF() 表达式中,可能需要这个而不是常规结果标记。

 

重复结果子句是由方括号 ([ ]) 括起来的 <resultPattern> 部分。重复子句中的文本将根据其在任何或所有结果标记中的输入文本的次数写入结果文本。如果没有匹配的输入文本,则不会将重复子句写入结果文本。但是,重复子句不能嵌套。如果需要嵌套重复子句,则可能需要为当前命令添加额外的 #command 规则。
 
重复子句是 #command 设施的结果模式部分,用于创建具有参数的可选子句。您可以使用除受限匹配标记之外的任何匹配标记与任何相应的结果标记写入结果文本。此设施的典型示例是 Std.ch 中 STORE 和 REPLACE 命令的定义。