Показать сообщение отдельно
  #2  
Старый 16.10.2012, 00:21
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от sariman
Здравствуйте форумчане! Возник такой вопрос, как изменить окончание слова "файл, файла, файлов" за счет их количества?
Вот что у меня получается:
Код:
function CountFiles(Col: Integer): string;
var
  Count: String;
  LastNumber: Integer;
begin
  Count := IntToStr(Col);
  LastNumber := StrToInt(Count[Length(Count)]);
    if LastNumber = 0 then
      Result := Col + ' файлов'
    else
      if LastNumber = 1 then
        Result := Col + ' файл'
      else
        if LastNumber in [2..4] then
          Result := Col + ' файла'
        else
          if LastNumber in [5..9] then
            Result := Col + ' файлов';
end;
Однако, проблема в том, что если будет диапазон от 11 до 14, у меня написано будет файл и файла, потому что я использую только последнюю цифру, я в строках не очень силен, поэтому прошу помощи, заранее спасибо.
Вот моя древнейшая функция для этого, которую я использую до сих пор:
Код:
function Rodov(Param: Integer; S0, S1, S2: String; aWord: String = ''): String;
begin
  if (Param mod 100) in [11..19] then Param:=0;
  case Param mod 10 of
    1   :Result:=aWord + S1;
    2..4:Result:=aWord + S2
  else
         Result:=aWord + S0
  end;
end;
Пример использования:
Код:
  ShowMessage(IntToStr(Col) + ' ' + Rodov(Col, 'файлов', 'файл', 'файла'));

  // или так:
  ShowMessage(IntToStr(Col) + Rodov(Col, 'ов', '', 'а', ' файл'));

p.s. Почему я эту функцию назвал именно так - не помню. Уже больше 10 лет прошло с тех пор...
Ответить с цитированием