[Delphi] Парсинг о от конкретного значения

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by DEAD666, 15 Aug 2014.

  1. DEAD666

    DEAD666 New Member

    Joined:
    4 Mar 2010
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте! Пишу программку на Delphi и появился вопрос, ответ на который я не смог ни где найти.

    Мне нужно, чтобы моя программка видела значение больше 10 000 - как гуд, а меньше 9 999 - как бэд

    Подскажите, пожалуйста, как это реализовать
     
  2. #colorblind

    #colorblind Moderator

    Joined:
    31 Jan 2014
    Messages:
    634
    Likes Received:
    246
    Reputations:
    42
    Условия заведомо неверные, т.к. 10000 у тебя не входит ни в одну из категорий. Или так и должно быть?

    Если строго по твоим условиям, то:
    if i>10000
    then good
    else if i<9999
    then bad

    Если 10000 и больше как гуд, тогда:
    if i>=10000
    then good
    else bad
     
  3. xophet

    xophet Member

    Joined:
    16 Apr 2011
    Messages:
    617
    Likes Received:
    49
    Reputations:
    5
    если его нужно вычленить из текста, то кинь кусок текста. придумаем регулярку
     
  4. DEAD666

    DEAD666 New Member

    Joined:
    4 Mar 2010
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Нужно сделать так, чтобы он просто пропускал или записывал как bad значения меньше 9999

    Вот 2 примера:

    Bad - значение меньше 9999 (2521)
    Code:
    <td class="bold">Урон</td><td style="color:red; font-weight: bold;">2521 (0+2521)</td>
    Good - значение больше 10000 (16146)
    Code:
    <td class="bold">Урон</td><td style="color:red; font-weight: bold;">16146 (0+16146)</td>
     
  5. 1n0y

    1n0y Active Member

    Joined:
    9 May 2009
    Messages:
    276
    Likes Received:
    280
    Reputations:
    2
    if copy(s, pos('weight: bold;">',s)+15,5)[5]=' ' then showmessage('<9999')
    else showmessage('>9999');
     
  6. DEAD666

    DEAD666 New Member

    Joined:
    4 Mar 2010
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Спасибо, за ответ но не мог бы ты мне немного разжевать, как куда и как это вставлять:

    Code:
    if copy(s, pos('weight: bold;">',s)+15,5)[5]=' ' then showmessage('<9999')
    else showmessage('>9999');
    Я много чего перепробовал, но все тщетно

    И возможно, что ты не так понял, мне не нужно, чтобы он показывал, какое значение меньше, а какое больше.

    У меня что-то вроде чекера, я ставлю базу из 5000 аккаунтов, он чекает, если там значение больше 9999 или больше того, которое я напишу в опциях, он будет считать это гудом, то что меньше записывает как bad

    Должно получится что-то вроде этого, но я не знаю как сделать так, чтобы можно было настраивать этот диапазон
     
  7. МongBa†

    МongBa† Member

    Joined:
    12 May 2009
    Messages:
    66
    Likes Received:
    12
    Reputations:
    0
    Как я понял - рыть нужно в бАшом куске ХТМЛ кода?

    Code:
    var
     dmg:integer;
     s:string;
    begin
     dmg:=10000; 
     s:=кусок хтмл кода;
     delete(s,1,pos('<td class="bold">Урон</td><td style="color:red; font-weight: bold;">',s)+67);
     s:=copy(s,1,pos(' ',s)-1);
     if strtoint(s)<dmg then
     begin
      // идет в беды
     end
     else
     begin
      // идет в гуды
     end;
    end;
     
    #7 МongBa†, 20 Aug 2014
    Last edited: 20 Aug 2014
  8. DEAD666

    DEAD666 New Member

    Joined:
    4 Mar 2010
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Большое спасибо! Все получилось, но теперь мне нужен код на настройку, чтобы я мог менять снаружи значение которое мне нужно
     
  9. #colorblind

    #colorblind Moderator

    Joined:
    31 Jan 2014
    Messages:
    634
    Likes Received:
    246
    Reputations:
    42
    Господи, когда уже каникулы закончатся...
     
  10. DEAD666

    DEAD666 New Member

    Joined:
    4 Mar 2010
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Т.е. если я ничего не смыслю в Delphi, то я сразу школьник? А что, если мне 31 год, я женат и у меня 2-е детей? Что это получается, школьники ничего не знают, а как только ты закончил школу, то тебя там научили абсолютно всему, даже Delphi?
    Похоже на логику школьника

    По теме: вопрос исчерпан.
     
  11. #colorblind

    #colorblind Moderator

    Joined:
    31 Jan 2014
    Messages:
    634
    Likes Received:
    246
    Reputations:
    42
    Школьник - это не какое-то возрастное определение, а модель поведия. Ты ничего сам не хочешь делать, не хочешь развиваться, единственное что тебе нужно - это чтобы за тебя делали определенные вещи. Будь тебе 9 лет ил 31, ты школьник, обыкновенный тупой школьник
     
  12. DEAD666

    DEAD666 New Member

    Joined:
    4 Mar 2010
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Зачем тогда этот форум? Я сделал все, кроме того что здесь спросил. Как я уже написал, я не нашел решения. Ты вообще головой своей думаешь? Перечитай все еще раз, идиот.
     
  13. long_island

    long_island New Member

    Joined:
    17 Jul 2013
    Messages:
    4
    Likes Received:
    0
    Reputations:
    0
    Ну ты просто кинь на форму edit и в код, что написал МongBa† передавай значение из этого edit'а:

    Code:
    var
     dmg:integer;
     s:string;
    begin
     dmg:=strtoint([B]edit.text[/B]); 
     s:=кусок хтмл кода;
     delete(s,1,pos('<td class="bold">Урон</td><td style="color:red; font-weight: bold;">',s)+67);
     s:=copy(s,1,pos(' ',s)-1);
     if strtoint(s)<dmg then
     begin
      // идет в беды
     end
     else
     begin
      // идет в гуды
     end;
    end;
     
  14. DEAD666

    DEAD666 New Member

    Joined:
    4 Mar 2010
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Спасибо, сделал так:
    Code:
     dmg:=SpinEdit1.Value;
     s:=Link;
     delete(s,1,pos('<td class="bold">Урон</td><td style="color:red; font-weight: bold;">',s)+67);
     s:=copy(s,1,pos(' ',s)-1);
     if strtoint(s)<dmg then
     
  15. accounts

    accounts New Member

    Joined:
    16 Oct 2011
    Messages:
    0
    Likes Received:
    4
    Reputations:
    10
    Code:
    function ParseOne (const Value, Lstring, Rstring : string) : string;
    var
      Lpos,
      Rpos : integer;
    begin
      Result := '';
      Lpos := pos (Lstring, Value);
      if Lpos > 0 then
      begin
        Lpos := Lpos + Length (Lstring);
        Rpos := posex (Rstring, Value, Lpos);
        if Rpos > 0 then Result := copy (Value, Lpos, Rpos - Lpos);
      end;
    end;
    
    ...
    
    var
      s : string;
    begin
      s := parseone ('html code', '<td class="bold">Урон</td><td style="color:red; font-weight: bold;">', ' ');
      if s <> '' then
        if strtoint (s) >= 10000 then ... else ... ;
    Более универсально, плюс не надо забывать о проверках.
     
  16. DEAD666

    DEAD666 New Member

    Joined:
    4 Mar 2010
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    К сожалению, не понимаю, что за проверки, но я сделал так:
    Code:
    dmg:=SpinEdit1.Value;
     s:=Link;
     delete(s,1,pos('<td class="bold">Урон</td><td style="color:red; font-weight: bold;">',s)+67);
     s:=copy(s,1,pos(' ',s)-1);
     if strtoint(s)<dmg then
    И у меня в результате очень часто за место валидных показывает следующих в базе после валидных. Однопоточный, но будто путается или торопится

    Краткий пример:

    База:
    1111111
    2222222 - этот валид
    3333333
    4444444

    В чеке же может показать, что валид этот - 3333333, реже этот - 4444444