помогите с парсингом друзей вк C++

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by good_man, 4 Aug 2010.

  1. good_man

    good_man New Member

    Joined:
    24 May 2010
    Messages:
    112
    Likes Received:
    3
    Reputations:
    -2
    Доброго времени суток форумчане!

    помогите плиз составить функуию парсинга друзей. сам принцип понимаю. но сделать немогу.

    получается выдрать только первый ид:
    //s= фриендс аякс пхп
    int start;
    int end;
    start=s.Pos("["); // нахождение начала
    end=s.Pos(","); // нахождение конца
    Memo1->Lines->Add(s.SubString(start,end-start));

    как заставить Pos продолжить идти дальше? наверно тут нужен какой то цикл, но я его немогу составить ( т.к. знаний еще маловато.

    как бы нужно заточить под C++ Builder
     
    #1 good_man, 4 Aug 2010
    Last edited: 4 Aug 2010
  2. BrainDeaD

    BrainDeaD Elder - Старейшина

    Joined:
    9 Jun 2005
    Messages:
    774
    Likes Received:
    292
    Reputations:
    214
    можно сюда твой стринг s?
     
  3. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,582
    Likes Received:
    1,310
    Reputations:
    1,557
    PHP:
    if(sPage.Pos("'friends':["))
    {
        
    sPage.Delete(1sPage.Pos("'friends':[") + 11 1);
        while(
    sPage.Pos("["))
        {
            
    sPage.Delete(1sPage.Pos("["));
            
    sFriend sPage;
            
    sFriend.SetLength(sFriend.Pos(",") - 1);
            
    FriendList->Add(sFriend);
        }
    }
    Смотри тут - http://vkontakte.ru/friends_ajax.php
     
    #3 M_script, 4 Aug 2010
    Last edited: 4 Aug 2010
    2 people like this.
  4. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    Фрагмент кода из моего проекта. Написан на дельфи, но принцип поймешь.
    Code:
        S:='id='+FUserID+'&filter=all';
        HTTP.Headers.Add('Referer: http://vkontakte.ru/friends.php?id='+FUserID);
        HTTP.Headers.Add('X-Requested-With: XMLHttpRequest');
        HTTP.Document.Write(S[1], Length(S));
        HTTP.MimeType:='application/x-www-form-urlencoded';
        HTTP.HTTPMethod('POST', 'http://vkontakte.ru/friends.php');
        Response.LoadFromStream(HTTP.Document);
        R.Expression:='\[(\d*?),"(.*?)","http';
        if R.Exec(Response.Text) then repeat
          M:=TVkWallFriend.Create;
          M.FFriendId:=R.Match[1];
          M.FFriendName:=R.Match[2];
          Self.Add(M);
        until not R.ExecNext;
     
  5. good_man

    good_man New Member

    Joined:
    24 May 2010
    Messages:
    112
    Likes Received:
    3
    Reputations:
    -2
    BrainDeaD

    это AnsiString )

    M_script

    большое прибольшое спасибо! опять вы меня выручили :)

    ушел разбиратцо )
     
  6. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    Заметил что регулярки никто не использует - это модно так?
     
  7. M_script

    M_script Members of Antichat

    Joined:
    4 Nov 2004
    Messages:
    2,582
    Likes Received:
    1,310
    Reputations:
    1,557
    Зачем использовать регулярки там, где в них нет необходимости? Большинство задач легко и удобно решается с помощь методов AnsiString
     
  8. Redeemer

    Redeemer Member

    Joined:
    3 Jul 2010
    Messages:
    203
    Likes Received:
    24
    Reputations:
    1
    Регулярки гибче, а по скорости пристост от спользования строковых функций мизерный
     
  9. BrainDeaD

    BrainDeaD Elder - Старейшина

    Joined:
    9 Jun 2005
    Messages:
    774
    Likes Received:
    292
    Reputations:
    214
    в данном случае ни о какой гибкости речи не идёт. стояла конкретная задача, которая была решена наиболее рациональным способом. о пользе регулярок никто не спорит, но их исползование должно быть оправданым.
     
    1 person likes this.