我有一个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。这将导致这些特定的页面计数为负数。
有人知道我为什么会有这种行为吗?
发布于 2014-01-17 22:18:08
这里有一种不同的方法,对我来说不那么令人困惑;但不确定它是否会减少对其他人的困惑。
? 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
发布于 2014-01-17 22:08:54
InStrRev()
从字符串的末尾搜索,但是它返回的位置相对于字符串的开头,而不是结尾。所以,
s = "this is a test--1"
Debug.Print InStrRev(s,"--")
显示15,以及
Right("this is a test--1",15)
显然不会隔离字符串末尾的"1“。那就可以用
Mid(s,InStrRev(s,"--")+2)
或者,在字符串中只有一个"--"
实例的情况下
Mid(s,InStr(s,"--")+2)
也能起作用。
https://stackoverflow.com/questions/21196579
复制相似问题