1. Pascal / Говнокод #10625

    +92

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    function THandlerServerCommands.CheckCommandOnDigits(const AComand: string;
      var AIndex: integer): Boolean;
    var
      i, k: Integer;
      Nn, Ln: integer;
      TempComand: string;
    begin
      Result := False;
      try
        TempComand := AComand;
        Ln := 1;
        Nn := 0;
        if FServerCommands.Find(TempComand, i) then
        begin
          AIndex := i;
          Result := True;
          Exit;
        end;
    
        for k := 1 to Length(AComand) do
        begin
          if not (AComand[k] in ['0'..'9']) then
            inc(Nn)
          else
          begin
            inc(Nn);
            if Nn > Ln then
            begin
              TempComand := '';
              TempComand := Copy(AComand, 1, Nn - 1);
              if FServerCommands.Find(TempComand, i) then
              begin
                AIndex := i;
                Result := True;
                Break;
              end;
            end;
            Ln := Nn + 1;
          end;
        end;
      except
        on e: Exception do
        begin
          Result := False;
          LogEx.Error('Ошибка в процедуре CheckCommandOnDigits c параметрами AComand = ' + AComand + ' ' + e.Message);
        end;
      end;
    end;

    Проверьте код на запашок

    Запостил: DeadIgle, 08 Июня 2012

    Комментарии (8) RSS

    • показать все, что скрытоГде здесь Pascal?
      Ответить
    • 1. строки 22-26:
      inc(Nn);
      if (AComand[k] in ['0'..'9']) then begin
      2. строка 29 не нужна.
      3. Вместо i лучше юзать AIndex - вряд ли нужно его сохранять при неуспешном поиске.
      4. Если не нашел предлагается AIndex = -1 для определенности.
      5. 44-я строка не нужна, вообще посмотрите хинты и варнинги.
      6. Лишняя переменная tempcommand - можно без нее.
      7. условие в строке 27 вообще никогда выполняется - это косяка (возможно в строках 23 и 26)?
      ЗЫ. правильно писать Command.
      Ответить
    • А что вообще с 20 по 40 строку происходит? Надо выделить часть команды до первой цифры? В любом случае это скорее всего в три строчки делается.
      Ответить
      • вот видимо, да. тока как-то коряво написано
        Ответить
    • Функция определяет номер команды AComand: string в списке команды FServerCommands:TStringList.
      Приоритет полного соответствия строк, далее соответствия строки до цифры.
      Например, список команд:
      1 notreply_limit
      2 notreply_limit2
      3 timer1_func
      функция
      от notreply_limit2 вернёт 2
      от notreply_limit вернёт 1
      от notreply_limit3 вернёт 1
      от timer1_func9 вернёт 3
      Команды приходят в таком виде с сервера.
      Ответить
      • еще пример команды с сервера:
        ProviderOptions142_comission_interval_2_ k1
        142 - параметр от 1 до 500
        Ответить
    • Now I know who the brainy one is, I'll keep looinkg for your posts.
      Ответить
    • ну что за гавнокод :(
      Ответить

    Добавить комментарий