Страницы: 1
RSS
Разборка параметров url
 
есть url и нужно выдернуть из него некоторые параметры, допустим: text, page и results
как я думаю сначала сплитом разбить на параметры со значением
Код
SplitURL= _ 
 Split("http://www.softodrom.ru/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA/?text=portable&where=soft _ 
&results=50&soft_index=descr&news_index=descr&games_index=descr&blogs_index=description&page=1", "&"  )
а потом затем разбить на два массива, один с именами параметров, другой со значениями
Код
param=" where,results,soft_index,news_index,games_index,blogs_index,page"
value="soft,50,descr,descr,descr,description,1"
и в итоге для каждого нужного параметра применить конструкцию
Код
Dim strValue, strParam, page, value, param  As String
param = "where,results,soft_index,news_index,games_index,blogs_index,page"
value = "soft,50,descr,descr,descr,description,1"
strValue = Split(value, ",")
strParam = Split(param, ",")
strParam = Application.match("page", strParam, 0)
page = strValue(strParam - 1)
Sheets("Обработаные запросы").Cells(4, 2) = page


Но вот как создать два этих массива (param и value ) и убрать " http://www.softodrom.ru/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA/?" ?
Или есть способ проще?

P.S.
некоторые искомые параметры могут отсутствовать, а ненужные могут добавляться или наоборот исчезать, порядок тоже неизвестен
Изменено: Владимир Сергеев - 25.02.2014 21:14:26
 
пока решил вот так, но не уверен что столько split'ов это правильно, и еще если искомый параметр отсутствует выдается ошибка error 2042, как сделать чтобы просто возвращалось Cells(4, 3)=""
Код
Sub spliteItem()
Dim strValue, strParam, page, value, param, a, SplitURL, SplitRavno, Element, _
ArrayValue, ArrayParam, OneElement, OneElementStr, strParamResults  As String
Dim strParamText, strParamPage As String
Dim i, countAmp As Integer
a = "http://www.softodrom.ru/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA/?text=portable&where=soft" _
& "&results=50&soft_index=descr&news_index=descr&games_index=descr&blogs_index=description&page=1"
    countAmp = Len(a) - Len(Replace(a, "&", ""))
    SplitURL = Split(a, "&")  

' извлекаем 1 параметр (text=portable)

    OneElement = Split(SplitURL(0), "?")
    OneElementStr = OneElement(1)  

' приводим к общему виду и создаем первые элементы массивов
    SplitRavno = Split(OneElementStr, "=") 
    ArrayParam = SplitRavno(0)
    ArrayValue = SplitRavno(1)  

'формируем массивы (пареметры и значения)
For i = 1 To countAmp
    Element = SplitURL(i)
        SplitRavno = Split(Element, "=")
        

    ArrayParam = ArrayParam & "," & SplitRavno(0)
    ArrayValue = ArrayValue & "," & SplitRavno(1)

Next i
param = ArrayParam
value = ArrayValue
strValue = Split(value, ",")
strParam = Split(param, ",")
strParamPage = Application.match("page", strParam, 0)
Cells(4, 2) = strValue(strParamPage - 1)
strParamText = Application.match("text", strParam, 0)
Cells(4, 3) = strValue(strParamText - 1)
strParamResults = Application.match("results", strParam, 0)
Cells(4, 4) = strValue(strParamResults - 1)

End Sub
 
Изменено: Владимир Сергеев - 26.02.2014 08:10:42
 
Код
Public Sub x()
Dim value(), param(),  SplitURL
Dim s as string, a as string
Dim i As Integer
a = "http://www.softodrom.ru/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA/?text=portable&where=soft" _
& "&results=50&soft_index=descr&news_index=descr&games_index=descr&blogs_index=description&page=1"
s = Right(a, Len(a) - InStrRev(a, "?")  'строка после  "?"
SplitURL = Split(s, "&")   'сплит
'задаем размер массивов = кол-во элементов в сплите
ReDim param(UBound(SplitURL))
ReDim value(UBound(SplitURL))
'в цикле пробегаем каждую пару, делая дополнительный сплит
For i = 0 To UBound(SplitURL)
    param(i) = Split(SplitURL(i), "=")(0)
    value(i) = Split(SplitURL(i), "=" )(1)
Next i
Debug.Print param(5) & " = " & value(5) 'далее хоть куда, обращаясь по индексу массива.
End Sub
Изменено: egonomist - 26.02.2014 11:58:14
 
Цитата
выдернуть из него некоторые параметры, допустим: text, page и results
Код
Sub spliteItem_1()
Dim i As Integer
Dim a, SplitURL, value, param
a = "http://www.softodrom.ru/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA/?text=portable&where=soft" _
& "&results=50&soft_index=descr&news_index=descr&games_index=descr&blogs_index=description&page=1"
        SplitURL = Split(a, "?")
        SplitURL = Split(SplitURL(1), "&")
    For i = 0 To UBound(SplitURL)
        If InStr(SplitURL(i), "page=") = 1 Then
            Cells(4, 2) = Right(SplitURL(i), Len(SplitURL(i)) - 5)
        End If
        If InStr(SplitURL(i), "text=") = 1 Then
            Cells(4, 3) = Right(SplitURL(i), Len(SplitURL(i)) - 5)
        End If
        If InStr(SplitURL(i), "results=") = 1 Then
            Cells(4, 4) = Right(SplitURL(i), Len(SplitURL(i)) - 8)
        End If
        'value = value & " " & Split(SplitURL(i), "=")(0)
        'param = param & " " & Split(SplitURL(i), "=")(1)
    Next
End Sub

 
 
Спасибо  egonomist   ,  Kuzmich буду определяться,
пока склонен к варианту от Kuzmich
Страницы: 1
Наверх