Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Help!!!


Автор: Slauta 19.5.2009, 22:43
Вообщем вот код! Нано что бы эта прога переименовывала все картинки DSC064**.jpg в пример:
32-33.jpg
34-35.jpg
36-37.jpg
38-39.jpg....
Код


for ($i = 1; $i < 100; ++$i)
{
#$o = $i+1;
$p=$i;
$w=DSC064.$p;
$l= '-';
$u=$i-3;

$n=$i-2;
$e=$u.$l.$n;
rename "$w.jpg", "$e.jpg";

print $i, " ";
}
print "\nPOSLE i = $i\n";


удаётся ток первые две строчки а потом всё.... Не идёт...

Автор: shamber 19.5.2009, 22:59
а Нано причем?

Цитата(Slauta @  19.5.2009,  22:43 Найти цитируемый пост)
Не идёт... 

как определили?

Цитата(Slauta @  19.5.2009,  22:43 Найти цитируемый пост)
$e=$u.$l.$n;

а это что за ужас? 
может проще 
Код

$e=$u.'-'.$n;

Ужос а не код
что вы им хотели сделать? Наплодили кучу ненужных переменных. Зачем?

Автор: Slauta 20.5.2009, 07:47
Ну лан код я изменил!
После выполнения скрипта переименовывает так:
32-33.jpg
34-35.jpg
35-36.jpg
36-37.....

а надо так:
32-33.jpg
34-35.jpg
36-37.jpg
38-39.jpg....

вот не хочет далше по нормальному переименовывать. Объясните где бага!

Автор: arto 20.5.2009, 08:46
perl -e '$n = 32; foreach (@ARGV) { rename $_,sprintf "%d-%d.jpg",$n++,$n++ }' *.jpg 

Автор: shamber 20.5.2009, 09:22
Цитата(Slauta @  20.5.2009,  07:47 Найти цитируемый пост)
Ну лан код я изменил!

ну лан я тожа 

Автор: amg 20.5.2009, 09:25
arto в своем репертуаре smile . Хотя для такой задачки самое то.

Еще вариант:
Код
for ($i=1; $i < 100; $i++) {
  $file = "DSC064$i.jpg";
  next if ! -f $file;
  rename $file, 2*$i-1 . '-' . 2*$i . 'jpg' or warn "Can't rename $file: $!\n";
}

Автор: shamber 20.5.2009, 09:53
мне кажется что фотоаппараты, ну или камеры как правило создают файлы типа
DSC06401.jpg а не DSC0641.jpg
$file = "DSC064$i.jpg";
я б еще добавил.
Код

if ($i<10){
$file = "DSC0640$i.jpg";
next if ! -f $file;
  rename $file, '0'.2*$i-1 . '-' .'0'. 2*$i . 'jpg' or warn "Can't rename $file: $!\n";
}


хотя такого условия и не было smile

Автор: Slauta 20.5.2009, 14:43
Сё пасиб за помощь shamber, amg, arto! Будем работать дальше! smile 

Автор: amg 20.5.2009, 15:27
Для Windows однострочник arto должен выглядеть как то так:
Код
perl -e "$n = 32; foreach (glob \"@ARGV\") {rename $_,sprintf '%d-%d.jpg',$n++,$n++}" DSC064*.jpg

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)