2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу 1, 2  След.
 
 Perl
Сообщение31.05.2011, 18:56 
Аватара пользователя
В перловом скрипте используется файл /dir1/dir2/dir3/text.txt как входящий аргумент ARGV[0]. Нужно из этого аргумента выделить путь /dir1/dir2/dir3 и присвоить его в качестве значения некоторой переменной. Как это сделать?
Спасибо заранее.

 
 
 
 Re: Perl
Сообщение31.05.2011, 19:07 
Аватара пользователя
Код:
$s = $ARGV[0];
$s =~ s/\/[^\/]+$//;

 
 
 
 Re: Perl
Сообщение31.05.2011, 19:28 
Аватара пользователя
Это сработало, cпасибо.
Как бы мне теперь используя эту переменную
Код:
$s
создать поддиректорию
Код:
dir1/dir2/dir3/newdir
и создать фаил
Код:
dir1/dir2/dir3/newdir/newfile.txt 
?

 
 
 
 Re: Perl
Сообщение31.05.2011, 19:46 
Аватара пользователя
Код:
mkdir $s || die "can't make dir: $!\n";
open(FILE,">$s/newfile") || die "can't open file: $!\n";
print FILE "hello world";
close(FILE);

 
 
 
 Re: Perl
Сообщение31.05.2011, 19:50 
Аватара пользователя
Я делаю что-то вроде того, но не работает. Можно ли скинуть код целиком Вам в личку?

 
 
 
 Re: Perl
Сообщение31.05.2011, 19:52 
Аватара пользователя
давайте

 
 
 
 Re: Perl
Сообщение31.05.2011, 21:48 
Аватара пользователя
Можно ли в перле открывать пачку файлов таким макаром:
Код:
for ($i=0; $i<8; $i++)
{
open(OUT$i, ">$filename[$i].txt") or die "can't open out $i";
}

У меня вылазит ошибка при обращении к любому из OUT0-OUT7

 
 
 
 Re: Perl
Сообщение31.05.2011, 22:25 
Аватара пользователя
Dan B-Yallay в сообщении #452413 писал(а):
Можно ли в перле открывать пачку файлов таким макаром:

Нет, конечно. Нельзя кодом влиять на имена переменных. Имена -- это синтаксическая сторона языка. Вот массив -- пожалуйста.
Код:
@out;
for ($i=0; $i<2; $i++) {
    open($out[$i], ">$filename[$i].txt") || die "can't open out $i because $!\n";
    print { $out[$i] } "hello world";  # тут важны фигурные скобки!
    close ($out[$i]);
}

 
 
 
 Re: Perl
Сообщение31.05.2011, 22:36 
Аватара пользователя
Мне нужно в программе рассортировывать строки из некоторого файла по различным OUT(file).
Сортировка идет снаружи цикла, поэтому хотелось иметь описанную конструкцию

 
 
 
 Re: Perl
Сообщение31.05.2011, 22:45 
Аватара пользователя
Ну так используйте снаружи, какая разница? Вы создаёте массив filehandle'ов @out в цикле (только не надо их закрывать, как у меня). После выхода из цикла массив никуда не денется. То есть вместо OUT0...OUT7 пишите просто $out[0]...$out[7], не забывая указывать фигурные скобки в спорных моментах (типа как в print, иначе perl просто не поймёт: вы хотите напечатать $out[...] или напечатать в файл $out[...]).

Вконце опять же циклом по $i все $out[$i] закрываете.

 
 
 
 Re: Perl
Сообщение31.05.2011, 22:53 
Аватара пользователя
Я так и сделал. Теперь ругается вообще на начало скрипта (который мы уже разобрали.)
Скину еще раз в личку?

 
 
 
 Re: Perl
Сообщение31.05.2011, 22:55 
Аватара пользователя
ок

 
 
 
 Re: Perl
Сообщение31.05.2011, 23:21 
Аватара пользователя
Больше не ругается, но в созданных файлах пусто. А должны быть строки из рассортированного файла. :?

 
 
 
 Re: Perl
Сообщение02.06.2011, 19:10 
Аватара пользователя
Добрый день.
Пытаюсь внутри перлового скрипта выполнить шелл-скрипт с помощью такой конструкции:
Код:
my $command = "$HOME/MyScripts/Annotating.sh $s/$r; done";
system $command;

Получаю сообщение о том, что файл не найден. Хотя он там есть.
Что я делаю не так?

 
 
 
 Re: Perl
Сообщение02.06.2011, 19:16 
Аватара пользователя
Экранируйте доллар, который должен уйти во внешний мир. Иначе перл будет считать это своей переменной.
Код:
my $command = "\$HOME/MyScripts/Annotating.sh $s/$r; done";
system $command;

 
 
 [ Сообщений: 24 ]  На страницу 1, 2  След.


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group