Ms access 使用布尔函数选择大小写
我正在构建一个JSON递归下降解析器,我遇到了一个有点恼人的情况 使用Select Case语句来决定下一步需要解析的内容通常很方便,但有时需要将字符的类用作标准是否有办法将布尔函数作为条件包含在Case语句中?或者,更一般地说,是否可以在Case语句中包含布尔条件,而不依赖于与Select Case变量的比较?我担心这是一个要么全有,要么全无的命题,我将不得不为冗长的If_Then-ElseIf-ElseIf-End_If's更改漂亮简洁的Select Case语句 这很好:Ms access 使用布尔函数选择大小写,ms-access,ms-access-2007,vba,Ms Access,Ms Access 2007,Vba,我正在构建一个JSON递归下降解析器,我遇到了一个有点恼人的情况 使用Select Case语句来决定下一步需要解析的内容通常很方便,但有时需要将字符的类用作标准是否有办法将布尔函数作为条件包含在Case语句中?或者,更一般地说,是否可以在Case语句中包含布尔条件,而不依赖于与Select Case变量的比较?我担心这是一个要么全有,要么全无的命题,我将不得不为冗长的If_Then-ElseIf-ElseIf-End_If's更改漂亮简洁的Select Case语句 这很好: Select C
Select Case curr_char
Case "{"
'Parse an Object
Case "["
'Parse an Array
Case Else
'Parser Error
End Select
但是假设我有一个函数私有函数isAlpha(str作为字符串)作为布尔值。这不起作用,因为将IsAlpha
,True
/False
的结果与curr\u char
的值进行比较:
Select Case curr_char
Case IsAlpha(curr_char)
MsgBox "It's alpha!"
Case "{"
'Parse an Object
Case "["
'Parse an Array
Case Else
'Parser Error
End Select
为了避免改变现有代码的结构,我使用了难看的、粗糙的、笨拙的:
Select Case True
Case IsAlpha(curr_char)
MsgBox "It's alpha!"
Case curr_char = "{"
'Parse an Object
Case curr_char = "["
'Parse an Array
Case Else
'Parser Error
End Select
我想你可以用一个中间函数做你想做的事情,它计算curr\u char
,并根据该函数的返回值来计算Select Case
选择案例分类(curr\u char)
案例“isAlpha=True”
MsgBox“是阿尔法!”
案例“{”
'解析对象
案例“[”
'解析数组
其他情况
'分析器错误
结束选择
公共函数分类(ByVal pChar作为字符串)作为字符串
变暗strReturn为字符串
如果是艾萨帕(pChar),那么
strReturn=“isAlpha=True”
其他的
strReturn=pChar
如果结束
分类=strReturn
端函数
我认为这符合你描述的要求,但不确定我有多喜欢它。所以如果你说“恶心”,我不会生气
但是,这种方法是可扩展的。您可以调整Categorize()
来处理附加函数,然后扩展Select Case
Case“SomeOtherFunction=True”
Cool!我喜欢这个主意,但为了性能起见,我想我可能需要分类返回一个CATEGORYENUM或其他具有适用字符类的东西,例如ce_LeftBrace、ce_LeftBracket、ce_Alpha、ce_Numeric……等等。谢谢你的建议!很公平,我会再给它几个小时,看看会带来什么。看看Sid是否有comments:)由于字符类不会与我使用它们的方式重叠,我决定使用一个预生成的数组,该数组将ascii/unicode代码(索引)映射到CharacterClassEnum。我将数组映射包装在一个函数中,正如您建议的那样,以处理边缘情况。再次感谢!