Показать сообщение отдельно
Старый 23.12.2007, 21:05
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 8  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Класс, упрощающий подбор окончания.
Можно использовать не только для даты, но для других слов описывая массив вне класса по принципу ARRAY_NAME и используя метод getNameIndex
Код:
class ru.inils.date.DateName {
	private static var __versionClass:String = "1.0";
	private static var ARRAY_NAME:Array = new Array (
		["миллисекунд", "миллисекунда", "миллисекунды"],
		["секунд", "секунда", "секунды"],
		["минут", "минута", "минута"],
		["часов", "час", "часа"],
		["дней", "день", "дня"],
		["месяцев", "месяц", "месяца"],
		["лет", "год", "года"]
	);
	/**
	 * Метод, помогает определить какой вид надо использовать для описания числа в зависимости от его значения. Возможно три вида. Например: 1 день/корова/год, 2 дня/коровы/год, 5 дней/коровы/лет. Если число или последние две цифры числа находят в диапазоне 11…19 (высший приоритет проверки), то вид равен 0. Далее вид определяется только по последней цифре числа. Если она равна 1, то вид равен 1. Если 2, 3 или 4, то вид равен 2. Во всех остальных случаях, вид равен 0.
	 * @param	val - Число.
	 * @return	Вид окончания.
	 */
	public static function getNameIndex (val:Number):Number {
		var len:Number = Number (String (val).substr (-2, 2));
		if (len > 9 && len < 20) {
			return 0;
		} else {
			len = Number (String (val).substr (-1, 1));
			if (len == 1) {
				return 1;
			} else if (len > 1 && len <5) {
				return 2;
			}
		}
		return 0;
	}
	/**
	 * Метод, возвращает описание числа в зависимости от его значения и типа.
	 * @param	val - Число требующие описание.
	 * @param	nameID - Тип числа: миллисекунда, секунда, минута, час, день, месяй или год.
	 * @return Описание числа.
	 */
	public static function getName (val:Number, nameID:Number):String {
		var index:Number = getNameIndex (val);
		return ARRAY_NAME[nameID][index];
	}
	public static function get NAME_MILLISECONDS ():Number {
		return 0;
	}
	public static function get NAME_SECONDS ():Number {
		return 1;
	}
	public static function get NAME_MINUTES ():Number {
		return 2;
	}
	public static function get NAME_HOURS ():Number {
		return 3;
	}
	public static function get NAME_DAYS ():Number {
		return 4;
	}
	public static function get NAME_MONTHS ():Number {
		return 5;
	}
	public static function get NAME_YEARS ():Number {
		return 6;
	}
}
Пример
Код:
import ru.inils.date.DateName;
var array:Array = ["коров", "корова", "коровы"]
function test (i:Number):Void {
	//// собственное определение
	trace (i + " " + array[DateName.getNameIndex (i)]);
	//// встроенные опрделения
	trace (i + " " + DateName.getName (i, DateName.NAME_MILLISECONDS));
	trace (i + " " + DateName.getName (i, DateName.NAME_SECONDS));
	trace (i + " " + DateName.getName (i, DateName.NAME_MINUTES));
	trace (i + " " + DateName.getName (i, DateName.NAME_HOURS));
	trace (i + " " + DateName.getName (i, DateName.NAME_DAYS));
	trace (i + " " + DateName.getName (i, DateName.NAME_MONTHS));
	trace (i + " " + DateName.getName (i, DateName.NAME_YEARS));
	trace ("")
}
test(1)
test(2)
test(5)
test(12)
test(16)
test(101)
__________________
(и)Нильс.ru | Плагины для FlashDevelop


Последний раз редактировалось iNils; 24.12.2007 в 14:01.