Школоло / Говнокод #10625 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 DeadIgle, (Updated )

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

  • 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
      Ответить

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

Семь раз отмерь — один отрежь, guest!

    А не использовать ли нам bbcode?


    8