首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >InStrRev没有给出正确的结果

InStrRev没有给出正确的结果
EN

Stack Overflow用户
提问于 2014-01-17 21:50:23
回答 2查看 441关注 0票数 1

我有一个Access数据库,在该数据库中,我以CSV格式从JabRef导入图书/日记出版物数据。当我导入数据来访问数据时,会发生的一件奇怪的事情是,在它们之间给出了两个连字符,所以Access中的“page”列中的数据看起来类似于“200-213”。

我需要能够计算被引用的页面数。

为了做到这一点,我在表单上的未绑定文本框中执行以下操作:

我在" pages“列中找到字符串的长度(必须将pages变量重命名为页面集的保留名称):PLen =Len(页面集)

我发现从左边到"--":LPageVar =InStr(页面集,"--")的字符数。

我找到从右到"--":RPageVar =InStrRev(页面集,"--")的字符数。

我在"--":LVal =左侧(页面集,LPageVar-1)左侧找到实际的页码。

我在"--":RVal = right (页面集,RPageVar-1)右侧找到实际的页码

我计算出现的页面数: Pgcnt = RVal - LVal

一切似乎都正常..。除非"InStrRev“击中的项目将数字增加10或100个点,如”7-11“、”7-23“或”92-101“,而不是这样:”102-123“或”103-110“(这不会引起任何问题)。当它到达这些较短的页面时,RPageVar太低了1。

对于右边的每一项,RVal似乎删除了第一个字符.所以对于“7-11”,最后一页报告为1,或“7-23”报告最后一页为3或"92--101“,最后一页报告为01。这将导致这些特定的页面计数为负数。

有人知道我为什么会有这种行为吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-17 22:18:08

这里有一种不同的方法,对我来说不那么令人困惑;但不确定它是否会减少对其他人的困惑。

代码语言:javascript
运行
复制
? PageCount("200--213")
 14 
? PageCount("7--11")
 5 

Function PageCount(ByVal pIn As String) As Long
    Dim astrPageRange() As String
    astrPageRange = Split(pIn, "--")
    PageCount = (Val(astrPageRange(1)) - Val(astrPageRange(0))) + 1
End Function
票数 1
EN

Stack Overflow用户

发布于 2014-01-17 22:08:54

InStrRev()从字符串的末尾搜索,但是它返回的位置相对于字符串的开头,而不是结尾。所以,

代码语言:javascript
运行
复制
s = "this is a test--1"
Debug.Print InStrRev(s,"--")

显示15,以及

代码语言:javascript
运行
复制
Right("this is a test--1",15)

显然不会隔离字符串末尾的"1“。那就可以用

代码语言:javascript
运行
复制
Mid(s,InStrRev(s,"--")+2)

或者,在字符串中只有一个"--"实例的情况下

代码语言:javascript
运行
复制
Mid(s,InStr(s,"--")+2)

也能起作用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21196579

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档