点击或拖拽改变大小

Functions.Normalize 方法

X#
-- todo --
将用户提供的表达式转换为X#内部使用的相同形式。 您可以使用表达式的标准化形式来更准确地与X#命令或函数返回的表达式进行比较。

命名空间:  XSharp.VFP
程序集:  XSharp.VFP (在 XSharp.VFP.dll 中) 版本:2.22 GA
语法
 FUNCTION Normalize(
	cExpression
) AS STRING CLIPPER
查看代码

参数

cExpression (Optional)
类型:__Usual
指定要标准化的字符表达式。

返回值

类型:String
字符型
备注
Normalize( ) 从字符表达式 cExpression 返回一个字符串,并进行以下更改。Normalize( )
  • 将字符表达式转换为大写。但不会更改嵌入的字符串。 嵌入字符串的示例是字符表达式 "LEFT('Hello',1)" 中的 "Hello"。
  • 将字符表达式中任何缩写的X#关键字扩展为其全长。
  • 将分隔别名和字段名的 -> 运算符转换为句点。
  • 用句点包围逻辑运算符 AND、OR 和 NOT:.AND. .OR. .NOT.
  • 在过滤器表达式中,删除术语之间的任何空格。
  • 检查字符表达式中任何X#命令或函数的语法,但不评估表达式。 如果语法不正确,X#会生成语法错误。Normalize( ) 不会查找字符表达式中的任何字段、表、内存变量、 用户定义函数或其他引用。
例如,用户可能在表达式生成器中输入以下索引表达式:
X#
1UPPE(cust->lname) + UPPE(cust->fname)
虽然这是一个有效的X#索引键表达式,但很难将其与X#函数(如 KEY( ))的返回值进行比较。 Normalize( ) 为上述表达式返回以下字符串:
X#
1UPPER(CUST.LNAME) + UPPER(CUST.FNAME)
您可以轻松地将其与 KEY( ) 等函数返回的值进行比较。 这使您能够验证具有用户提供的索引表达式的索引或索引标记的存在。 此外,您可以使用 Normalize 比较 Set("Filter")Filter( ) 的结果。 例如,您可以创建以下过滤器表达式:
X#
1STORE '"VIRGINIA" $ UPPER(state) AND NOT "MAINE" $ UPPER(state)' TO
2MyFilter
3Use Addresses
4LINK Word.Document.8 "C:\\Documents and Settings\\v-rodhil\\My Documents\\DocStudio\\Projects\\dv_foxhelp91\\cc1ce3c4-1dc6-4d8f-9406-c8bab4d6a40a.xml"
5"OLE_LINK1" \a \r  \* MERGEForMAT STORE '"VIRGINIA" $ UPPER(state) AND NOT "MAINE" $ UPPER(state)' TO
6MyFilter
7Set Filter TO &MyFilter
但是,Set("Filter")Filter( ) 返回的值与原始过滤器不完全匹配。
X#
1? Set("Filter") == MyFilter  // .F.
Set("Filter")Filter( ) 返回以下内容:
X#
1"VIRGINIA"$UPPER(STATE).AND..NOT."MAINE"$UPPER(STATE)
要确保正确比较,请使用:
X#
1? Normalize(MyFilter) == Set("Filter")  // .T.
参见