#perl
#perl
Вопрос:
У меня здесь проблема. Пожалуйста, посмотрите мои коды.
use warnings;
use strict;
###ASK IMPUT FROM USER
print "Enter the Area: ";
my $area = <>;
print "Enter the Equipment: ";
my $equipment = <>;
print "Enter the Month: ";
my $month = <>;
print "Enter the Year: ";
my $year = <>;
###SUBROUTINE (FUNCTION) TO REMOVE THE WHITESPACE
sub rem_spaces {
my $t = shift || return(0); #Common practice: Use shift to take $t as a first parameter passed to the subroutine
$t =~ s/^s //; #remove leading spaces
$t =~ s/s $//; #remove trailing spaces
return $t;
}
####VARIABLE DECLARATION
my $REMOTE_HOST = "C:\Users\attmsbj1\Desktop\pic";
my $RESULT_FOLDER = "C:\Users\attmsbj1\Desktop\RESULT";
###CREATE FOLDER IF FOLDER DOES NOT EXIST.
if(-e $RESULT_FOLDER){
print "File exists.";
}
else {
mkdir ($RESULT_FOLDER);
}
###OPEN THE NEW FOLDER<br>
opendir (NewFolder, $RESULT_FOLDER) or die "Couldn't open the current directory: $!";
###OPEN PHOTOS FOLDER<br>
opendir (PicFolder, $REMOTE_HOST) or die "Couldn't open the current directory: $!";
@PicFolder =<PicFolder>;
###LOOP THROUGH ALL THE PICTURES IN THE FOLDER
foreach (@PicFolder)
{
if(###FULL STRING INPUT BY USER = PICFOLDER)
{
###MOVE OR COPY THE PICTURE TO THE NEW FOLDER
}
}
closedir PicFolder;
Проблема теперь в том, 1) Как мне распечатать входные данные, предоставленные пользователем, в 1 строку??
Например. Область: 4;
Оборудование: TQC
Месяц : июль
Год выпуска : 2011
Я хочу напечатать это в 4TQCJuly2011.jpg
Я застрял в цикле
Спасибо за чтение и помощь.
Дополнительная информация Моя основная цель — создать скрипт на perl для
- Запрашивать входные данные у пользователя
- Откройте папку с фотографиями
- Сравните имя входных данных (объедините входные данные в *.jpg) от пользователя с именем изображения в папке с фотографиями
- Если это то же самое, переместите картинку или скопируйте картинку в новую папку
Я хочу, чтобы формат входных данных, предоставленных пользователем, был $ area $ equipment $ month $year.jpg
Он всегда выводит
4
TQC
ИЮЛЯ
2011
.jpg
вместо 4TQCJULY2011.jpg (Я хочу этот результат)
Комментарии:
1. Домашнее задание? Кроме того, пожалуйста, правильно отформатируйте
2. спасибо за формат. это моя первая публикация на этом сайте.
3. Конкатенация действительно так проста, как
my $new_value = "$old_value$another_value"
.4. Чтобы удалить начальные и конечные пробелы, лучше использовать trim(…) из String::Util
Ответ №1:
Вы можете просто объединить их после chomping
$area . $equipment . $month . $year
другие методы включают sprintf
$result = sprintf("%s%s%s%s", $area, $equipment, $month,$year);
Смотрите perldoc -f sprintf
подробнее
Комментарии:
1. Я хочу, чтобы формат был в таком виде $площадь $ оборудование $ месяц $year.jpg
2. итак, что происходит, когда вы используете оператор «.» для объединения этих строк? Помните о
chomp
каждом вводе. Также, чтобы поместить «.jpg» позади, снова используйте оператор «.». Я не понимаю, почему это так сложно.3. Он печатает 4 TQC ИЮЛЬ 2011 .jpg в отдельной строке, а не в одной строке
4. я сказал, что сначала вам нужно обработать эти входные данные.
Ответ №2:
Я думаю, я, должно быть, неправильно понял ваш вопрос, но если все, что вы хотите сделать, это напечатать строки $ area, $ equipment, $ month и $ year, почему бы вам просто не использовать
print ($area.$equipment.$month.$year.".jpg");'?
Комментарии:
1. пробовал это раньше, но не работает. Спасибо за ответ. Я просто новичок в perl
2. @Sharil Определяет «не работает». Что вы получаете и каковы ожидаемые результаты?
3. Он печатает 4 TQC ИЮЛЬ 2011 .jpg в отдельной строке, а не в одной строке
4. Возможно, вам нужно использовать chomp для ваших входных строк, чтобы удалить завершающие символы
Ответ №3:
Удалите все символы новой строки из переменных
my $str = "$area$equipment$month$year.jpg";
$str =~ s/(r|n)//g; #you could potentially filter this more..
Примечание: Я не использовал perl в Windows, поэтому это может быть не на 100% правильно, linux, я бы использовал mv
foreach my $cur (@PicFolder) {
if($str =~ /$cur/){
# I don't think this will work on windows.. `cp $PicFolder/$cur $NewFolder/$cur`;
#this might work..
rename ("$PicFolder/$cur, "$NewFolder/$cur" );
}
}
Это должно помочь вам начать..