2014-01-17 2 views
1

У меня есть база данных Access, в которой я импортирую данные публикации книг/журналов из JabRef в формате CSV. Когда я импортирую данные для доступа к одной из нечетных вещей, которые происходят, это то, что номера страниц задаются двумя дефисами между ними, поэтому данные в столбце «pages» в Access выглядят примерно так: «200-213»InStrRev не дает правильные результаты

Мне нужно уметь подсчитывать количество страниц, на которые ссылаются.

Для того, чтобы сделать это я делаю следующее в несвязанных текстовых полей на форме:

я найти длину строки в столбце «страница» (должно переименовать страницы переменных, как это зарезервированное имя к pagesset): ПЛЭН = Len ([pagesset])

Я нахожу количество символов, которые происходят от левого вплоть до "-": LPageVar = InStr ([pagesset], "-")

Я нахожу количество символов, которые происходят справа до «-»: RPageVar = InStrRev ([pagesset], «-»)

Я нашел фактический номер страницы в левой части «-»: LVal = Влево ([pagesset], [LPageVar] -1)

Я нашел фактический номер страницы в правой части экрана, - ": RVal = Right ([pagesset], [RPageVar] -1)

рассчитать количество страниц, которые появляются: Pgcnt = RVal - LVal

Все, кажется, работает ... кроме случаев, когда «InStrRev» ударяет элемент, который увеличивает число на 10 или 100 точек, например: «7-11», «7-23» или «92-101» в противоположность этому: «102 - 123 "или" 103-110 "(что не вызывает проблем). Когда он попадает в эти более короткие pagethe, RPageVar является слишком низким на 1.

Для каждого из этих элементов справа RVal, кажется, бросает первый символ ... так что для «7-11» последняя страница отображается как 1 или для «7-23» он будет сообщать последнюю страницу как 3 или «92-101», последняя страница будет сообщена как 01. Это приводит к тому, что эти конкретные значения страниц будут отрицательными.

У кого-нибудь есть идея, почему я получаю такое поведение?

+0

Сколько страниц в этом ассортименте «1--2»? – HansUp

+0

Я считаю, что ваш код правильно вычисляет страницы. В диапазоне «1--2» будет 2 страницы. – Vaulcul

ответ

1

Вот другой подход, который менее запутан для меня; не уверен, что он будет менее запутанным для кого-либо еще.

? 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

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) 

также будет работать.

+0

Спасибо, Горд, это помогло мне разобраться в проблеме ... в конечном итоге я пошел с ответом HansUp, так как это упростило процесс. – Vaulcul

Смежные вопросы