2014 dxdy logo

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

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




Начать новую тему Ответить на тему На страницу 1, 2  След.
 
 Perl
Сообщение31.05.2011, 18:56 
Заслуженный участник
Аватара пользователя


11/12/05
10059
В перловом скрипте используется файл /dir1/dir2/dir3/text.txt как входящий аргумент ARGV[0]. Нужно из этого аргумента выделить путь /dir1/dir2/dir3 и присвоить его в качестве значения некоторой переменной. Как это сделать?
Спасибо заранее.

 Профиль  
                  
 
 Re: Perl
Сообщение31.05.2011, 19:07 
Заслуженный участник
Аватара пользователя


07/01/10
2015
Код:
$s = $ARGV[0];
$s =~ s/\/[^\/]+$//;

 Профиль  
                  
 
 Re: Perl
Сообщение31.05.2011, 19:28 
Заслуженный участник
Аватара пользователя


11/12/05
10059
Это сработало, cпасибо.
Как бы мне теперь используя эту переменную
Код:
$s
создать поддиректорию
Код:
dir1/dir2/dir3/newdir
и создать фаил
Код:
dir1/dir2/dir3/newdir/newfile.txt 
?

 Профиль  
                  
 
 Re: Perl
Сообщение31.05.2011, 19:46 
Заслуженный участник
Аватара пользователя


07/01/10
2015
Код:
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 
Заслуженный участник
Аватара пользователя


11/12/05
10059
Я делаю что-то вроде того, но не работает. Можно ли скинуть код целиком Вам в личку?

 Профиль  
                  
 
 Re: Perl
Сообщение31.05.2011, 19:52 
Заслуженный участник
Аватара пользователя


07/01/10
2015
давайте

 Профиль  
                  
 
 Re: Perl
Сообщение31.05.2011, 21:48 
Заслуженный участник
Аватара пользователя


11/12/05
10059
Можно ли в перле открывать пачку файлов таким макаром:
Код:
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 
Заслуженный участник
Аватара пользователя


07/01/10
2015
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 
Заслуженный участник
Аватара пользователя


11/12/05
10059
Мне нужно в программе рассортировывать строки из некоторого файла по различным OUT(file).
Сортировка идет снаружи цикла, поэтому хотелось иметь описанную конструкцию

 Профиль  
                  
 
 Re: Perl
Сообщение31.05.2011, 22:45 
Заслуженный участник
Аватара пользователя


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

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

 Профиль  
                  
 
 Re: Perl
Сообщение31.05.2011, 22:53 
Заслуженный участник
Аватара пользователя


11/12/05
10059
Я так и сделал. Теперь ругается вообще на начало скрипта (который мы уже разобрали.)
Скину еще раз в личку?

 Профиль  
                  
 
 Re: Perl
Сообщение31.05.2011, 22:55 
Заслуженный участник
Аватара пользователя


07/01/10
2015
ок

 Профиль  
                  
 
 Re: Perl
Сообщение31.05.2011, 23:21 
Заслуженный участник
Аватара пользователя


11/12/05
10059
Больше не ругается, но в созданных файлах пусто. А должны быть строки из рассортированного файла. :?

 Профиль  
                  
 
 Re: Perl
Сообщение02.06.2011, 19:10 
Заслуженный участник
Аватара пользователя


11/12/05
10059
Добрый день.
Пытаюсь внутри перлового скрипта выполнить шелл-скрипт с помощью такой конструкции:
Код:
my $command = "$HOME/MyScripts/Annotating.sh $s/$r; done";
system $command;

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

 Профиль  
                  
 
 Re: Perl
Сообщение02.06.2011, 19:16 
Заслуженный участник
Аватара пользователя


07/01/10
2015
Экранируйте доллар, который должен уйти во внешний мир. Иначе перл будет считать это своей переменной.
Код:
my $command = "\$HOME/MyScripts/Annotating.sh $s/$r; done";
system $command;

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 24 ]  На страницу 1, 2  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group