Невозможно извлечь идентификаторы из URL - PullRequest
0 голосов
/ 14 февраля 2019

Я пытаюсь разделить несколько URL, чтобы идентификаторы находились в самой правой части каждого URL.В других языках есть опции обратного индексирования, как в [-1] для разделения последней части.Тем не менее, я изо всех сил пытаюсь найти любой такой вариант в VBA, чтобы добиться цели.Пожалуйста, рассмотрите эту попытку Split(linkId, "/")(1) как заполнитель.

Как мне получить идентификаторы, расположенные в самой правой части разных URL-адресов?

Моя попытка на данный момент:

Sub GetId()
    Dim linkId As Variant, linkList As Variant

    linkList = Array( _
        "https://etc.com/en/category/all/all/shops/206898", _
        "https://etc.com/ar/category/all/mobile/350689", _
        "https://etc.com/bn/category/all/bike/760689" _
        )


    For Each linkId In linkList
        Debug.Print Split(linkId, "/")(1)
    Next linkId
End Sub

Ожидаемый результат:

206898
350689
760689

Почтовый скрипт: идентификаторы могут быть не всегда одинаковой длины.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Вы хотите индекс самой правой косой черты.InStr может получить индекс персонажа, начинающегося слева, но вам нужно InStrRev, чтобы получить индекс символа, начинающегося справа.

Используя этот индекс, Mid функция возвращает вам искомую подстроку - этот код выдает желаемый результат:

Debug.Print Mid(linkId, InStrRev(linkId, "/") + 1)

Нет необходимости Split строки и использования манипуляций с массивами, строковые функции могут обрабатывать это изначально.

Обратите внимание, что For Each эффективен для итерационных коллекций объектов.Для итерации массивов используйте цикл For для оптимальной производительности [Source] .

Более того, работа с String вместо Variant позволяет избежать неявного типапреобразования.Следовательно, это должно быть более эффективным:

Sub GetId()
    Dim linkList As Variant
    linkList = Array( _
        "https://etc.com/en/category/all/all/shops/206898", _
        "https://etc.com/ar/category/all/mobile/350689", _
        "https://etc.com/bn/category/all/bike/760689" _
        )
    Dim current As Long, link As String
    For current = LBound(linkList) To UBound(linkList)
        link = linkList(current)
        Debug.Print Mid$(link, InStrRev(link, "/") + 1)
    Next
End Sub
0 голосов
/ 14 февраля 2019
Sub GetId()
    Dim linkId As Variant, linkList As Variant, v As Variant

    linkList = Array( _
        "https://etc.com/en/category/all/all/shops/206898", _
        "https://etc.com/ar/category/all/mobile/350689", _
        "https://etc.com/bn/category/all/bike/760689" _
        )

    For Each linkId In linkList
        v = Split(linkId, "/")
        Debug.Print v(UBound(v))
    Next linkId
End Sub
...