парими значения

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by akimov_aleks, 12 Jun 2010.

  1. akimov_aleks

    akimov_aleks New Member

    Joined:
    3 May 2009
    Messages:
    39
    Likes Received:
    1
    Reputations:
    0
    парсим значения

    Возник вопрос.
    я хочу с парсить значения с исходного кода.
    Code:
    'idi': '784167',
    если использовать так
    idi':=Copy(S, Pos('idi'', V)+7, 6);
    то касяк так как 784167 может состоять как из 6 так из 5 или 7 цифр
    попробовал через функцию
    Code:
    idi':=(Pars('от',S,'до'));
    от это - 'idi': '
    до это- ',
    так нельзя подставить граници от до так как они содержат знак '
    сама функция
    Code:
    function Pars(T_, ForS, _T: string): string;
    var
      a, b: integer;
    begin
      Result := '';
      if (T_ = '') or (ForS = '') or (_T = '') then
        Exit;
      a := Pos(T_, ForS);
      if a = 0 then
        Exit
      else
        a := a + Length(T_);
      ForS := Copy(ForS, a, Length(ForS) - a + 1);
      b := Pos(_T, ForS);
      if b > 0 then
        Result := Copy(ForS, 1, b - 1);
    end;
    
    какие еще есть методы подскажите.
     
    #1 akimov_aleks, 12 Jun 2010
    Last edited: 12 Jun 2010
  2. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22

    ...
     
    #2 GhostOnline, 12 Jun 2010
    Last edited: 12 Jun 2010
  3. ErrorNeo

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

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    836
    Reputations:
    402
    idi:=Copy(S, Pos('idi'', V)+7, 7);
    if not (idi[5] in ['0'..'9']) then setlength(idi,5) else
    if not (idi[6] in ['0'..'9']) then setlength(idi,6);
     
  4. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    регэкспы?
     
  5. GhostOnline

    GhostOnline Active Member

    Joined:
    20 Dec 2008
    Messages:
    723
    Likes Received:
    110
    Reputations:
    22
    ErrorNeo кстати да, можно же на вхождение в множество проверять.
    Я сначал объявлял переменную set of '0'..'9' так там оказывалось не то что я ожидал.
    Но твой способ вроде катит только на 5-6 цифр, остальное надо дописывать.
    Допустим если 10 цифр будет?
    Переделанный код с множествами
     
  6. ErrorNeo

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

    Joined:
    2 May 2009
    Messages:
    923
    Likes Received:
    836
    Reputations:
    402
    а я в своих программах не допускаю невозможных случаев=)
    если ТС сказал 5-7 символов, значит 5-7 символов! xD
     
  7. Ra$cal

    Ra$cal Elder - Старейшина

    Joined:
    16 Aug 2006
    Messages:
    670
    Likes Received:
    185
    Reputations:
    78
    '(?<id>[\w]+)'\s*:\s*'(?<number>[\d]+)'

    Вот и все. Что вы там очередные велосипеды придумываете?

    Если лимиты есть можно точнее ограничить
    '(?<id>[\w]+)'\s*:\s*'(?<number>[\d]{5,7})'
     
  8. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    PHP:
    sText.Delete(1sText.Pos("'idi':") + 1);
    sText.Delete(1sText.Pos("'"));
    sText.SetLength(sText.Pos("'") - 1);