powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничная транслитерация.
25 сообщений из 34, страница 1 из 2
Тяпничная транслитерация.
    #39673917
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет. С пятницей всех.

1) У меня - штук 5 мультимедийных плееров которые не хавают кириллицу в именах файлов.

Вобщем нужно такую штуку

Код: plaintext
1.
2.
'00 Содержание.mp3'                            
'01 Айзек Азимов - И тьма пришла.mp3' 



Сделать в такую.
Код: plaintext
1.
2.
00 Soderjanie.mp3
01 Aizek Azimov - I tma prishla.mp3



Это - задача минимум.

Типа.

Код: plaintext
1.
$ transliterate *.mp3



2) Задача максимум - пофиксить mp3-теги внутри файла. Там тоже бывают всякие. Но это - опционально. Кто осилит.

Можно на сях. Можно на чем угодно. Хардкодом все. Без всяких там ... динамических либ.

PS. Go! Go!
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39673932
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39673943
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неспортивно. Кроме того форум c++ .. А не готовых утилит под windows.
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39673945
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В простейшем случае достаточно просто таблицы перекодировки в виде ассоциативного массива:
Код: plaintext
1.
tab['А'] = "A"; tab['Б'] = "B"; ...


дальше перебираем буквы в исходной строке и меняем по таблице.

По-хорошему нужен стандарт на транслит, т.к. есть проблема с написанием ФИО в документах и на картах. Несовпадение всего в одну букву и могут трактовать что речь про двух разных людей.
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39673950
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TВ простейшем случае достаточно просто таблицы перекодировки в виде ассоциативного массива
tab['Й'] = ???; tab['Ё'] = ???; tab['Ь'] = ???; tab['Ы'] = ???; tab['Ъ'] = ???;
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39673953
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы еще добавил таблички для основных европейских языков. Например для Paul Mauriat
некоторые треки могут иметь такие названия.

Код: plaintext
1.
2.
3.
1 - Brasilia Carnaval 	
2 - L’été Indien Africa 
3 - Mélisa 	



Это французский.

И если качать альбомы De-Phazz на не-англоязычных трекерах то можно найти немецкие буквы.
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39673955
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TПо-хорошему нужен стандарт на транслит, т.к. есть проблема с написанием ФИО в документах и на картах. Несовпадение всего в одну букву и могут трактовать что речь про двух разных людей.
В данном топике мне не особо важен стандарт. Тут - скорее охват. Чтоб больше аудиотреков
я мог прочитать в китайском mp3-плеере.
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39673966
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Задача чисто инженерная, нет в ней никакого челленджа.
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39673968
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Более того. Она - корыстная.
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39673982
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychDima TВ простейшем случае достаточно просто таблицы перекодировки в виде ассоциативного массива
tab['Й'] = ???; tab['Ё'] = ???; tab['Ь'] = ???; tab['Ы'] = ???; tab['Ъ'] = ???;
Код: plaintext
1.
tab['Й'] = "Y"; tab['Ё'] = "E"; tab['Ь'] = ""; tab['Ы'] = "Y"; tab['Ъ'] = "";


Для переименования файлов с музыкой сойдет
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39673993
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Подумайте как быть с кодами которых не будет в вашей табличке.
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39673994
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПодумайте как быть с кодами которых не будет в вашей табличке.
Проверил по таблице - если нет, то писать как есть. Т.е. символ не требует транслитерации.
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39673995
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давай такой алгоритм.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
if (matchesTo(symbol,"[A..Z]|[a..z]|[0..9]") || isSpacer(symbol)) {
   return symbol;
} else {
   if (russianTab.contains(symbol) {
       return russianTab[symbol];
   } else if (frenchTab.contains(symbol) {
       return frenchTab[symbol];  
   } ..... over 100600 code-pages
     // otherwize wrap symbol with file-system tolerant code sequence
       return wrap(symbol);
   }
}
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39673998
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для красивой транслитерации надо уметь перекодировать не только посимвольно, но и группами.
Т.е. на каждой итерации находим самую длинную последовательность.
Например мне нравится такие правила:
ий -> y
и - i
й - j
Московский ->Moskovsky (а не Moskovskij)
но при этом
мои - moi
мой - moj
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39674002
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly Moskovsky, нужно последовательно применять замены начиная с групп.

Но в вашем случае КМК еще и надо проверять регуляркой конец слова.

"ий$" -> "y"
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39674052
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton, французский откуда появился? В изначальном ТЗ его не было.

А по поводу ы/и/й могу сказать что эти буквы есть в моем ФИО и как их только не коверкали. Под рукой 6 банковских карт 4х банков и на них четыре разных написания моего ФИО.
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39674062
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поль Мориа - француз.
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39674067
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вобщем - транслитерируйте как угодно. Лишь-бы на выходе были символы с кодами
в диапазоне от 0x20 до 0x7F.
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39674071
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
#!/usr/bin/awk -f
BEGIN {
	FS = OFS = ""
	table["а"] = "a"
	table["б"] = "b"
	table["в"] = "v"
	table["г"] = "g"
	# and so on...
}
{
    for (i = 1; i <= NF; ++i) {
        if ($i in table) {
            $i = table[$i]
        }
    }
}
1



echo "аббв" | awk -f awk_translit
abbv
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39674072
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,

слишком просто, нет контеста

задача для младшего техника, подпомошника
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39674074
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну сорян. На пятницу других идей не было. Кроме того что плеера не показывают национальные символы.

Подкинь свою тему. Я не против.
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39674109
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonПоль Мориа - француз.
Написано кириллицей - значит русский ))

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
std::string translit(const std::string& str) {
	static std::map<char, std::string> tm;
	if(tm.size() == 0) { // Заполнение таблицы
		for (char *s = "абвгдеёжзиклмнопрстуфхцэюАБВГДЕЁЖЗИКЛМНОПРСТУФХЦЭЮ"
			, *d = "abvgdeegziklmnoprstufhceuABVGDEEGZIKLMNOPRSTUFHCEU"; *s; s++, d++) {
			tm[*s] = *d;
		}
		tm['ч'] = "ch"; tm['ш'] = "sh"; tm['щ'] = "ch"; tm['ъ'] = ""; tm['ь'] = ""; tm['я'] = "ya";
		tm['Ч'] = "CH"; tm['Ш'] = "SH"; tm['Щ'] = "CH"; tm['Ъ'] = ""; tm['Ь'] = ""; tm['Я'] = "YA";
	}

	std::string res;
	for (const char* s = str.c_str(); *s; s++) {
		if(tm.find(*s) == tm.end()) {
			res += *s;
		} else {
			res += tm[*s];
		}
	}
	return res;
}



Код: plaintext
1.
printf("%s \n", translit("Поль Мориа - француз.mp3").c_str());


Код: plaintext
Pol Moria - francuz.mp3
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39674124
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorychDima TВ простейшем случае достаточно просто таблицы перекодировки в виде ассоциативного массива
tab['Й'] = ???; tab['Ё'] = ???; tab['Ь'] = ???; tab['Ы'] = ???; tab['Ъ'] = ???;
yojik - ёжик
rybka - рыбка
tramvainyi - трамвайный
iodirovannyi sulfat natriya (иногда пишут sul'fat, но в ЧПУ это не нужно, можно напороться на обработчик кавычек)
Ь и Ъ = пусто
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39674128
tip78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton1) У меня - штук 5 мультимедийных плееров которые не хавают кириллицу в именах файлов.
почему не поставить 1 AIMP ?
...
Рейтинг: 0 / 0
Тяпничная транслитерация.
    #39674129
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше писать sulfat. Неудобно набирать апостроф на клавиатуре. Вряд-ли я буду его набирать, но всяко
лучше упрощать себе работу с файлами на будущее.
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / C++ [игнор отключен] [закрыт для гостей] / Тяпничная транслитерация.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]