Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.10.2012, 00:06
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
Радость Изменение окончания слова

Здравствуйте форумчане! Возник такой вопрос, как изменить окончание слова "файл, файла, файлов" за счет их количества?
Вот что у меня получается:
Код:
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, у меня написано будет файл и файла, потому что я использую только последнюю цифру, я в строках не очень силен, поэтому прошу помощи, заранее спасибо.
Ответить с цитированием
  #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 лет прошло с тех пор...
Ответить с цитированием
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение:
sariman (16.10.2012)
  #3  
Старый 16.10.2012, 00:22
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Чем case не устраивает?
Код:
function CountFiles(Col: Integer): string;
var
  Count: String;
  LastNumber: Integer;
begin
  Count := IntToStr(Col);
  LastNumber := StrToInt(Count[Length(Count)]) mod 10;
  case LastNumber of
    0, 5..9 : Result := Col + ' файлов';
    1       : Result := Col + ' файл';
    2..4    : Result := Col + ' файла';
end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.

Последний раз редактировалось angvelem, 16.10.2012 в 00:24.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
sariman (16.10.2012)
  #4  
Старый 16.10.2012, 09:09
Аватар для sariman
sariman sariman вне форума
Активный
 
Регистрация: 19.11.2011
Адрес: Украина, Луганская обл.
Сообщения: 244
Версия Delphi: 7, XE, Lazarus
Репутация: выкл
По умолчанию

Спасибо большое!)))
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 20:00.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter