MS Access使用Mid和Instr函数提取事件字符串中文件路径的问题
问题排查与解决
错误原因
你写的Mid函数第三个参数(截取长度)的计算逻辑存在错误:Mid函数的语法为Mid(待处理字符串, 起始截取位置, 截取长度),你当前使用的长度计算公式InstrRev(event,"Handle ID:") - Len(mid(event,InstrRev(event,"Handle ID:")))的运算结果并非「Object Name: 结束位置」到「Handle ID: 起始位置」之间的距离,因此会多截取到后面的多余字符。
另外如果待处理字符串中仅存在一处Handle ID:,使用Instr正向查找即可,无需使用InstrRev反向查找。
正确实现逻辑
先计算两个关键位置,再求截取长度即可:
- 计算
Object Name:的结束位置,也就是文件路径的起始位置:objPathStart = Instr(event, "Object Name: ") + 13 - 计算
Handle ID:的起始位置,也就是文件路径的结束位置的下一位:handleIdStart = Instr(event, "Handle ID:") - 截取长度为两个位置的差值:
objPathLength = handleIdStart - objPathStart
最终正确的代码为:
' 直接截取 Mid(event, Instr(event, "Object Name: ") + 13, Instr(event, "Handle ID:") - (Instr(event, "Object Name: ") + 13)) ' 如果需要去除路径前后可能存在的多余空格,可套一层Trim Trim(Mid(event, Instr(event, "Object Name: ") + 13, Instr(event, "Handle ID:") - (Instr(event, "Object Name: ") + 13)))
验证效果
用你给出的示例字符串测试,以上代码可以准确提取出c:\temp\MyFile.doc,不会残留多余字符。
内容的提问来源于stack exchange,提问作者Lele
相关产品推荐
相关产品推荐

