перевод русских названий в транслит

Форум для программистов

Сообщение Vilkuss » Сб май 20, 2006 12:08 am

Есть очень большая куча папок и файлов с русскими названиями, нужно их перевести в транслит. Желательно использовать БАШ или Питон.
Вообще нет никаких мыслей как это сделать-(.
Не надо говорить мне, что надо делать.... и я не скажу, куда вам надо пойти!
<a href="http://nastayka.livejournal.com/" target="_blank">lj</a>
Vilkuss
Подполковник
 
Сообщений: 642
Зарегистрирован: Вт авг 30, 2005 12:33 am
Откуда: Vlad
Пункты репутации: 0

Сообщение skipyrich » Сб май 20, 2006 1:01 am

А перл пойдёт?

Upd Прочитал подпись и подумал, что напомнить ТБ не помешает <!--emo&:)-->[img]style_emoticons/<#EMO_DIR#>/smile.gif[/img]<!--endemo-->
1. Работать не рутом
2. Использовать chroot
3. Сначала проверить на некритичных данных, потому что с меня взятки гладки <!--emo&:rolleyes:-->[img]style_emoticons/<#EMO_DIR#>/rolleyes.gif[/img]<!--endemo-->

Код: выделить все
#!/usr/bin/perl

%ru_tr = (
   "щ" => "sh'",
   "Щ" => "Sh'",
   "ё" => "jo",
   "ж" => "zh",
   "ч" => "ch",
   "ш" => "sh",
   "э" => "e'",
   "ю" => "ju",
   "я" => "ja",
   "Ё" => "Jo",
   "Ж" => "Zh",
   "Ч" => "Ch",
   "Ш" => "Sh",
   "Э" => "E'",
   "Ю" => "Ju",
   "Я" => "Ja",
   "а" => "a",
   "б" => "b",
   "в" => "v",
   "г" => "g",
   "д" => "d",
   "е" => "e",
   "з" => "z",
   "и" => "i",
   "й" => "j",
   "к" => "k",
   "л" => "l",
   "м" => "m",
   "н" => "n",
   "о" => "o",
   "п" => "p",
   "р" => "r",
   "с" => "s",
   "т" => "t",
   "у" => "u",
   "ф" => "f",
   "х" => "h",
   "ц" => "c",
   "ъ" => "`",
   "ы" => "y",
   "ь" => "'",
   "А" => "A",
   "Б" => "B",
   "В" => "V",
   "Г" => "G",
   "Д" => "D",
   "Е" => "E",
   "З" => "Z",
   "И" => "I",
   "Й" => "J",
   "К" => "K",
   "Л" => "L",
   "М" => "M",
   "Н" => "N",
   "О" => "O",
   "П" => "P",
   "Р" => "R",
   "С" => "S",
   "Т" => "T",
   "У" => "U",
   "Ф" => "F",
   "Х" => "H",
   "Ц" => "C",
   "Ъ" => "`",
   "Ы" => "Y",
   "Ь" => "'",
);


$dir = $ARGV[0] or die("usage: blahblah.pl root");

enu($dir);

sub enu
{
   my $dir = shift;
   my $name;
   opendir(DIR, $dir) or die $!;
   my @files = readdir(DIR);
   closedir(DIR);
   for $name (@files){
 next if($name =~ /^\.+$/);
 my $newname = recode($name);
 if($newname ne $name){
    print "rename '$dir/$name' to '$dir/$newname'\n";
    rename("$dir/$name", "$dir/$newname");
 }
 if(-d "$dir/$newname"){
    enu("$dir/$newname");
 }
   }
}

sub recode
{
   my @chars = split('', shift);
   my $c;
   for $c (@chars){
 if(defined($ru_tr{$c})){
    $c = $ru_tr{$c};
 }
   }
   $c = join('', @chars);
   return $c;
}
Последний раз редактировалось skipyrich Сб май 20, 2006 1:08 am, всего редактировалось 1 раз.
skipyrich
Лейтенант
 
Сообщений: 80
Зарегистрирован: Пт дек 24, 2004 10:49 pm
Пункты репутации: 0

Сообщение Vilkuss » Сб май 20, 2006 1:08 am

спасибо, попробую -)))

не может найти интерпритатор. если убрать "!" в первой строке, то
Код: выделить все
#nastay@lu:> ./translit.sh
: command not found 2:
./translit.sh: line 3: syntax error near unexpected token `('
'/translit.sh: line 3: `%ru_tr = (

-((
Последний раз редактировалось Vilkuss Сб май 20, 2006 1:34 am, всего редактировалось 1 раз.
Не надо говорить мне, что надо делать.... и я не скажу, куда вам надо пойти!
<a href="http://nastayka.livejournal.com/" target="_blank">lj</a>
Vilkuss
Подполковник
 
Сообщений: 642
Зарегистрирован: Вт авг 30, 2005 12:33 am
Откуда: Vlad
Пункты репутации: 0

Сообщение DruiD » Сб май 20, 2006 5:07 am

<!--QuoteBegin-Nastay+May 20 2006, 04:08--><div class='quotetop'>QUOTE(Nastay @ May 20 2006, 04:08)</div><div class='quotemain'><!--QuoteEBegin-->не может найти интерпритатор.
[right][snapback]208677[/snapback][/right]
<!--QuoteEnd--></div><!--QuoteEEnd-->
знач он не учтановлен :(
Что за система?
попробуй сделать whereis perl, если скажет что нет нигде, то надо будет ставить.

<!--QuoteBegin-Nastay+May 20 2006, 04:08--><div class='quotetop'>QUOTE(Nastay @ May 20 2006, 04:08)</div><div class='quotemain'><!--QuoteEBegin-->nastay@lu
[right][snapback]208677[/snapback][/right]
<!--QuoteEnd--></div><!--QuoteEEnd-->
как это романтично :)
"Вы можете тысячу раз обвинять нас, богиня вечного суда истории усмехнется, разорвет приговор вашего суда, и, после, объявит нас свободными".
А. Гитлер, Mein Kampf.
DruiD
Полковник
 
Сообщений: 1171
Зарегистрирован: Чт июн 02, 2005 3:13 pm
Откуда: Зеленоград
Пункты репутации: 0

Сообщение Vilkuss » Сб май 20, 2006 6:17 am

2DruiD
Код: выделить все
nastay@lu:> whereis perl
perl: /usr/bin/perl /usr/share/man/man1/perl.1.gz

SuSe 10.0 OSS
Не надо говорить мне, что надо делать.... и я не скажу, куда вам надо пойти!
<a href="http://nastayka.livejournal.com/" target="_blank">lj</a>
Vilkuss
Подполковник
 
Сообщений: 642
Зарегистрирован: Вт авг 30, 2005 12:33 am
Откуда: Vlad
Пункты репутации: 0

Сообщение Vilkuss » Сб май 20, 2006 6:48 am

может я как-то не правильно запускаю?
Не надо говорить мне, что надо делать.... и я не скажу, куда вам надо пойти!
<a href="http://nastayka.livejournal.com/" target="_blank">lj</a>
Vilkuss
Подполковник
 
Сообщений: 642
Зарегистрирован: Вт авг 30, 2005 12:33 am
Откуда: Vlad
Пункты репутации: 0

Сообщение DruiD » Сб май 20, 2006 7:13 am

2Nastay
а что именно он отвечает на ./translit?
право на исполнение судя по всему ты дала, так?
"Вы можете тысячу раз обвинять нас, богиня вечного суда истории усмехнется, разорвет приговор вашего суда, и, после, объявит нас свободными".
А. Гитлер, Mein Kampf.
DruiD
Полковник
 
Сообщений: 1171
Зарегистрирован: Чт июн 02, 2005 3:13 pm
Откуда: Зеленоград
Пункты репутации: 0

Сообщение NickFW » Сб май 20, 2006 7:14 am

я делал на ПХП:
Код: выделить все
//Транслит
   function transliterate_en_ru( $text2 ) {
   $inf1 = str_replace("Ey", "Эй", "$text2");
   $inf2 = str_replace("ey", "эй", "$inf1");

   $inf3 = str_replace("Oy", "Ой", "$inf2");
   $inf4 = str_replace("oy", "ой", "$inf3");

   $inf5 = str_replace("Iy", "Ий", "$inf4");
   $inf6 = str_replace("iy", "ий", "$inf5");

   $inf7 = str_replace("Ay", "Ай", "$inf6");
   $inf8 = str_replace("ay", "ай", "$inf7");

   $inf9 = str_replace("Уy", "Ый", "$inf8");
   $inf10 = str_replace("уy", "ый", "$inf9");

   $inf11 = str_replace("Uy", "Уй", "$inf10");
   $inf12 = str_replace("uy", "уй", "$inf11");

   $inf13 = str_replace("Jo", "Ё", "$inf12");
   $inf14 = str_replace("jo", "ё", "$inf13");

   $inf15 = str_replace("Jo", "Ё", "$inf14");
   $inf16 = str_replace("jo", "ё", "$inf15");

   $inf17 = str_replace("Yo", "Ё", "$inf16");
   $inf18 = str_replace("yo", "ё", "$inf17");

   $inf19 = str_replace("Zh", "Ж", "$inf18");
   $inf20 = str_replace("zh", "ж", "$inf19");

   $inf21 = str_replace("Ch", "Ч", "$inf20");
   $inf22 = str_replace("ch", "ч", "$inf21");

   $inf23 = str_replace("Sch", "Щ", "$inf22");
   $inf24 = str_replace("sch", "щ", "$inf23");

   $inf25 = str_replace("S'h", "Щ", "$inf24");
   $inf26 = str_replace("s'h", "щ", "$inf25");

   $inf27 = str_replace("S`h", "Щ", "$inf26");
   $inf28 = str_replace("s`h", "щ", "$inf27");

   $inf29 = str_replace("C`", "Щ", "$inf28");
   $inf30 = str_replace("c`", "щ", "$inf29");

   $inf31 = str_replace("C'", "Щ", "$inf30");
   $inf32 = str_replace("c'", "щ", "$inf31");

   $inf33 = str_replace("Sh", "Ш", "$inf32");
   $inf34 = str_replace("sh", "ш", "$inf33");

   $inf35 = str_replace("Ju", "Ю", "$inf34");
   $inf36 = str_replace("ju", "ю", "$inf35");

   $inf37 = str_replace("Yu", "Ю", "$inf36");
   $inf38 = str_replace("yu", "ю", "$inf37");

   $inf39 = str_replace("Ja", "Я", "$inf38");
   $inf40 = str_replace("ja", "я", "$inf39");

   $inf41 = str_replace("Ya", "Я", "$inf40");
   $inf42 = str_replace("ya", "я", "$inf41");

   $inf43 = str_replace("Q", "Э", "$inf42");
   $inf44 = str_replace("q", "э", "$inf43");

   $inf45 = str_replace("E'", "Э", "$inf44");
   $inf46 = str_replace("e'", "э", "$inf45");

   $inf47 = str_replace("E`", "Э", "$inf46");
   $inf48 = str_replace("e`", "э", "$inf47");

   $inf49 = str_replace("Kh", "Х", "$inf48");
   $inf50 = str_replace("kh", "х", "$inf49");

   $inf51 = str_replace("H", "Х", "$inf50");
   $inf52 = str_replace("h", "х", "$inf51");

   $inf53 = str_replace("X", "Кс", "$inf52");
   $inf54 = str_replace("x", "кс", "$inf53");

   $inf55 = str_replace("'", "ь", "$inf54");
   $inf56 = str_replace("`", "ь", "$inf55");

   $inf57 = str_replace("''", "ъ", "$inf56");
   $inf58 = str_replace("``", "ъ", "$inf57");

   $inf59 = str_replace("X", "Кс", "$inf58");
   $inf60 = str_replace("x", "кс", "$inf59");

   $inf61 = str_replace("A", "А", "$inf60");
   $inf62 = str_replace("a", "а", "$inf61");

   $inf63 = str_replace("B", "Б", "$inf62");
   $inf64 = str_replace("b", "б", "$inf63");

   $inf65 = str_replace("V", "В", "$inf64");
   $inf66 = str_replace("v", "в", "$inf65");

   $inf67 = str_replace("W", "В", "$inf66");
   $inf68 = str_replace("w", "в", "$inf67");

   $inf69 = str_replace("G", "Г", "$inf68");
   $inf70 = str_replace("g", "г", "$inf69");

   $inf71 = str_replace("D", "Д", "$inf70");
   $inf72 = str_replace("d", "д", "$inf71");

   $inf73 = str_replace("E", "Е", "$inf72");
   $inf74 = str_replace("e", "е", "$inf73");

   $inf75 = str_replace("Z", "З", "$inf74");
   $inf76 = str_replace("z", "з", "$inf75");

   $inf77 = str_replace("I", "И", "$inf76");
   $inf78 = str_replace("i", "и", "$inf77");

   $inf79 = str_replace("J", "Й", "$inf78");
   $inf80 = str_replace("j", "й", "$inf79");

   $inf81 = str_replace("K", "К", "$inf80");
   $inf82 = str_replace("k", "к", "$inf81");

   $inf83 = str_replace("L", "Л", "$inf82");
   $inf84 = str_replace("l", "л", "$inf83");

   $inf85 = str_replace("M", "М", "$inf84");
   $inf86 = str_replace("m", "м", "$inf85");

   $inf87 = str_replace("N", "Н", "$inf86");
   $inf88 = str_replace("n", "н", "$inf87");

   $inf89 = str_replace("О", "O", "$inf88");
   $inf90 = str_replace("о", "o", "$inf89");

   $inf91 = str_replace("P", "П", "$inf90");
   $inf92 = str_replace("p", "п", "$inf91");

   $inf93 = str_replace("R", "Р", "$inf92");
   $inf94 = str_replace("r", "р", "$inf93");

   $inf95 = str_replace("S", "С", "$inf94");
   $inf96 = str_replace("s", "с", "$inf95");

   $inf97 = str_replace("T", "Т", "$inf96");
   $inf98 = str_replace("t", "т", "$inf97");

   $inf99 = str_replace("U", "У", "$inf98");
   $inf100 = str_replace("u", "у", "$inf99");

   $inf101 = str_replace("F", "Ф", "$inf100");
   $inf102 = str_replace("f", "ф", "$inf101");

   $inf103 = str_replace("C", "Ц", "$inf102");
   $inf104 = str_replace("c", "ц", "$inf103");

   $inf105 = str_replace("Y", "Ы", "$inf104");
   $inf106 = str_replace("y", "ы", "$inf105");

   $result=$inf106;
   return $result;
   }
NickFW
Маршал
 
Сообщений: 6178
Зарегистрирован: Чт апр 11, 2002 11:46 am
Откуда: kemerovo / siberia
Пункты репутации: 0

Сообщение Vilkuss » Сб май 20, 2006 7:18 am

2DruiD
Код: выделить все
nastay@lu:~> ./translit.sh
: command not found 2:
./translit.sh: line 3: syntax error near unexpected token `('
'/translit.sh: line 3: `%ru_tr = (

это без ! вначале, а с ним :
Код: выделить все
nastay@lu:~> ./translit.sh
: bad interpreter: No such file or directory
Не надо говорить мне, что надо делать.... и я не скажу, куда вам надо пойти!
<a href="http://nastayka.livejournal.com/" target="_blank">lj</a>
Vilkuss
Подполковник
 
Сообщений: 642
Зарегистрирован: Вт авг 30, 2005 12:33 am
Откуда: Vlad
Пункты репутации: 0

Сообщение DruiD » Сб май 20, 2006 7:36 am

2Nastay
фигня какая то.. перл есть а шелл его не видит что ли?
А чо пишет если просто perl в коммандной строке написать?
"Вы можете тысячу раз обвинять нас, богиня вечного суда истории усмехнется, разорвет приговор вашего суда, и, после, объявит нас свободными".
А. Гитлер, Mein Kampf.
DruiD
Полковник
 
Сообщений: 1171
Зарегистрирован: Чт июн 02, 2005 3:13 pm
Откуда: Зеленоград
Пункты репутации: 0

Сообщение Vilkuss » Сб май 20, 2006 7:39 am

2DruiD
ничего не пишет...будто что то исполняется, но ничего не появляется, не приглашения, не ошибки
Не надо говорить мне, что надо делать.... и я не скажу, куда вам надо пойти!
<a href="http://nastayka.livejournal.com/" target="_blank">lj</a>
Vilkuss
Подполковник
 
Сообщений: 642
Зарегистрирован: Вт авг 30, 2005 12:33 am
Откуда: Vlad
Пункты репутации: 0

Сообщение LU » Пн май 22, 2006 11:07 am

проблемма решилаь, причем совсем с другой стороны.
Храни меня, Господь, от тех, кому я верю.
Кому не верю - тех остерегусь я сам. © Ж. Санд
Изображение
Компьютерный гений в первую очередь творческая личность и только потом пьяная скотина.
LU
Полковник
 
Сообщений: 1424
Зарегистрирован: Пт янв 31, 2003 12:11 am
Откуда: Владивосток
Пункты репутации: 0

Сообщение NickFW » Пн май 22, 2006 3:33 pm

2LU
ну и с какой если не секрет? <!--emo&:)-->[img]style_emoticons/<#EMO_DIR#>/smile.gif[/img]<!--endemo-->
и вообще чего над бедной девушкой издеваешься? то МАК ей подсунул, то транслит заставляешь колупать <!--emo&;)-->[img]style_emoticons/<#EMO_DIR#>/wink.gif[/img]<!--endemo-->
NickFW
Маршал
 
Сообщений: 6178
Зарегистрирован: Чт апр 11, 2002 11:46 am
Откуда: kemerovo / siberia
Пункты репутации: 0

Сообщение LU » Пн май 22, 2006 10:00 pm

2NickFW
дело в том што проблемма то и состояла в невозможности прочитать на маке русские названия файлов созданных в винде...... каюсь, при первой установке забыл ср1251 поставить -))) Доставил кодировки и все видно -))) Настенька не с того конца к проблемме подошла -)))
Храни меня, Господь, от тех, кому я верю.
Кому не верю - тех остерегусь я сам. © Ж. Санд
Изображение
Компьютерный гений в первую очередь творческая личность и только потом пьяная скотина.
LU
Полковник
 
Сообщений: 1424
Зарегистрирован: Пт янв 31, 2003 12:11 am
Откуда: Владивосток
Пункты репутации: 0

Сообщение Vilkuss » Вт май 23, 2006 12:40 am

Эх - х -х ....Тяжела жизнь сельской девушки....-(((
Не надо говорить мне, что надо делать.... и я не скажу, куда вам надо пойти!
<a href="http://nastayka.livejournal.com/" target="_blank">lj</a>
Vilkuss
Подполковник
 
Сообщений: 642
Зарегистрирован: Вт авг 30, 2005 12:33 am
Откуда: Vlad
Пункты репутации: 0

След.

Вернуться в Программирование

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12

cron