Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 30.06.2011, 14:04
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 11  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
@kacbip
Зачем тут Dictionary? Тут обычного Object вполне себе хватит.
Код AS3:
private static const _latinToCyr:Object = new Object();
private static const _cyrToLatin:Object = new Object();
 
...
 
public function getLatin(cyr:String):String {
 
if (!(cyr in _cyrToLatin)) throw new ArgumentError("Буква не зарегистрирована!");
return _cyrToLatin(cyr) as String;
 
}
__________________
...вселенская грусть

Старый 30.06.2011, 14:37
Abdilxamidov вне форума Посмотреть профиль Отправить личное сообщение для Abdilxamidov Найти все сообщения от Abdilxamidov
  № 12  
Ответить с цитированием
Abdilxamidov

Регистрация: Mar 2009
Адрес: Киев
Сообщений: 95
Цитата:
Сообщение от КорДум Посмотреть сообщение
Есть еще регулярные выражения.
на каждый символ регулярное выражение составлять или можно чтобы массив искомых символов менялся на массив конечных символов (с соответствием мест символов в массивах конечно)?

Старый 30.06.2011, 14:59
kackbip вне форума Посмотреть профиль Отправить личное сообщение для kackbip Найти все сообщения от kackbip
  № 13  
Ответить с цитированием
kackbip
 
Аватар для kackbip

Регистрация: Sep 2007
Адрес: Tomsk
Сообщений: 943
Отправить сообщение для kackbip с помощью ICQ Отправить сообщение для kackbip с помощью Skype™
gloomyBrain, да, пожалуй.

Старый 30.06.2011, 21:36
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 14  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
kackbip: А зачем для этого Dictionary?
Если чесно, я не совсем представляю, как вы будете решать это с помощью регулярных выражений. Еще такой момент: перевод из кириллицы в латиницу не 100% совпадает туда и обратно (т.как количество элементов в алфавитах разное). И вообще, как по мне, то идея граничит с абсурдом... А что будете делать, если файлы будут по-китайски называться?
Есть стандартное решение: escape() или encodeURIComponent() - почитайте про них, выберите то, что больше подходит, и, так, по крайней мере можно однозначно перевести из большего алфавита в меньший и обратно, без потерь по дороге.
__________________
Hell is the possibility of sanity

Старый 01.07.2011, 01:12
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 15  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Цитата:
Если чесно, я не совсем представляю, как вы будете решать это с помощью регулярных выражений.
String#replace() же )
__________________
тут я

Старый 01.07.2011, 10:36
DaFive вне форума Посмотреть профиль Отправить личное сообщение для DaFive Посетить домашнюю страницу DaFive Найти все сообщения от DaFive
  № 16  
Ответить с цитированием
DaFive
 
Аватар для DaFive

Регистрация: May 2008
Адрес: {0,0}
Сообщений: 754
Записей в блоге: 1
Отправить сообщение для DaFive с помощью ICQ
Нашел какой-то жаваскрипт и перевел во флеш.
Код AS3:
var A:Array = new Array();
 
A["Ё"] = "YO"; A["Й"] = "I";  A["Ц"] = "C"; A["У"] = "U"; A["К"] = "K"; A["Е"] = "E"; A["Н"] = "N"; A["Г"] = "G"; A["Ш"] = "SH"; A["Щ"] = "SCH"; A["З"] = "Z"; A["Х"] = "H"; A["Ъ"] = "'";
A["ё"] = "yo"; A["й"] = "i";  A["ц"] = "c"; A["у"] = "u"; A["к"] = "k"; A["е"] = "e"; A["н"] = "n"; A["г"] = "g"; A["ш"] = "sh"; A["щ"] = "sch"; A["з"] = "z"; A["х"] = "h"; A["ъ"] = "'";
A["Ф"] = "F";  A["Ы"] = "I";  A["В"] = "V"; A["А"] = "A"; A["П"] = "P"; A["Р"] = "R"; A["О"] = "O"; A["Л"] = "L"; A["Д"] = "D"; A["Ж"] = "ZH"; A["Э"] = "E";
A["ф"] = "f";  A["ы"] = "i";  A["в"] = "v"; A["а"] = "a"; A["п"] = "p"; A["р"] = "r"; A["о"] = "o"; A["л"] = "l"; A["д"] = "d"; A["ж"] = "zh"; A["э"] = "e";
A["Я"] = "YA"; A["Ч"] = "CH"; A["С"] = "S"; A["М"] = "M"; A["И"] = "I"; A["Т"] = "T"; A["Ь"] = "'"; A["Б"] = "B"; A["Ю"] = "YU";
A["я"] = "ya"; A["ч"] = "ch"; A["с"] = "s"; A["м"] = "m"; A["и"] = "i"; A["т"] = "t"; A["ь"] = "'"; A["б"] = "b"; A["ю"] = "yu";
 
var txt:String = 'ту транслит';
 
txt = txt.replace(/([\u0410-\u0451])/g,
function (str, p1, offset, s) 
{
      if (A[str] != 'undefined'){return A[str];}
}
);
 
trace(txt);
__________________
Кодинг, багинг, алгоритминг. me @

Старый 01.07.2011, 11:34
wvxvw вне форума Посмотреть профиль Отправить личное сообщение для wvxvw Найти все сообщения от wvxvw
  № 17  
Ответить с цитированием
wvxvw
Modus ponens
 
Аватар для wvxvw

модератор форума
Регистрация: Jul 2006
Адрес: #1=(list #1#)
Сообщений: 8,049
Записей в блоге: 38
И как вы за один проход замените регулярным выражением 32 разных элемента набором из 25-и разных элементов? Я не говорю, что это невозможно, но это крайне непродуктивно. Кроме того, а как вы будете заменять твердый знак, например?
Но самый главный вопрос это зачем именно транслитерация, когда для задачи она 1. не работает для всего возможного ввода. 2. иногда работает неправильно в оба конца (YO -> Ё | Yo -> Ё, Ё -> YO). 3. даже когда работает правильно, иногда создает строки которые все равно прийдется еще раз перекодировать, если их нужно использовать как имена файлов / пересылать как URI компонент (твердый знак по ГОСТу - #).
__________________
Hell is the possibility of sanity


Последний раз редактировалось wvxvw; 01.07.2011 в 11:38.
Старый 01.07.2011, 11:59
DaFive вне форума Посмотреть профиль Отправить личное сообщение для DaFive Посетить домашнюю страницу DaFive Найти все сообщения от DaFive
  № 18  
Ответить с цитированием
DaFive
 
Аватар для DaFive

Регистрация: May 2008
Адрес: {0,0}
Сообщений: 754
Записей в блоге: 1
Отправить сообщение для DaFive с помощью ICQ
А никто и не говорил, что код работает в обе стороны. Выдан вообще как пример, причем написанный явно давно и непонятно кем.
__________________
Кодинг, багинг, алгоритминг. me @

Старый 01.07.2011, 15:39
Abdilxamidov вне форума Посмотреть профиль Отправить личное сообщение для Abdilxamidov Найти все сообщения от Abdilxamidov
  № 19  
Ответить с цитированием
Abdilxamidov

Регистрация: Mar 2009
Адрес: Киев
Сообщений: 95
да уж, наверное, лучше вообще грузить на сервер файлы, не сохраняя исходные названия. Присваивать, например, сразу им какие-то цифровые уникальные имена (например отметку времени в млсек) и так уже потом аплодить, а исходные имена можно (если они потом могут понадобиться) отдельно в виде текстового поля в базу прописывать или в соответствующий узел xml

Старый 18.07.2011, 19:17
MXPain вне форума Посмотреть профиль Отправить личное сообщение для MXPain Найти все сообщения от MXPain
  № 20  
Ответить с цитированием
MXPain
 
Аватар для MXPain

Регистрация: Dec 2008
Сообщений: 305
Записей в блоге: 1
Сорри за оффтоп, вот мне как раз понадобилось по быстрому оттранслитить, воспользовался вариантом gloomyBrain, как самым прекрасным)) может кому пригодится работающая версия:

Код AS3:
private static const _cyrrilic:Object = {а:"a",б:"b",в:"v",г:"g",д:"d",е:"e",ё:"yo",ж:"zh",з:"z",и:"i",
			к:"k",л:"l",м:"m",н:"n",о:"o",п:"p",р:"r",с:"s",т:"t",у:"u",ф:"f", 
			х:"h",ц:"c",ч:"ch",ш:"sh",щ:"sch",ь:"'",ы:"i",ъ:"'",э:"e",ю:"yu",я:"ya"};
 
public static function getLatin(cyr:String):String //передаем строчку
		{
			var i:uint;
			var translt:String="";
			for(i=0;i<cyr.length;i++)
			{
				var letter:String = cyr.charAt(i).toLowerCase();
				if (!letter in _cyrrilic) 
					throw new ArgumentError("Буква не зарегистрирована!");
				translt = translt.concat(_cyrrilic[letter]);
			}
			return translt as String;
		}
Добавлено через 3 часа 59 минут
Код AS3:
public static function getLatin(cyr:String):String 
		{
			var i:uint;
			var translt:String="";
 
			for(i=0;i<cyr.length;i++)
			{
				var letter:String = cyr.charAt(i).toLowerCase();
				var isWSpace:Boolean = CharacterUtil.isWhitespace(cyr.charCodeAt(i));
				if(isWSpace)
				{
					translt = translt.concat("_");
				}
				else translt = translt.concat(_cyrrilic[letter]);
				//если кириллические символы из структуры
				if (!letter in _cyrrilic) 
					translt = translt.concat(letter);
			}
 
			return translt +".png" as String;
		}
а вот для названий файлов

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:01.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 14:01.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.