IMHO.WS

IMHO.WS (http://www.imho.ws/index.php)
-   Веб-программирование (http://www.imho.ws/forumdisplay.php?f=29)
-   -   Как в скритпе на перл обработать файл передаваемый скрипту в ком-й строке? (http://www.imho.ws/showthread.php?t=56519)

Shkurik 14.04.2004 21:56

Как в скритпе на перл обработать файл передаваемый скрипту в ком-й строке?
 
что-то вроде script.pl filename (в винд)
т.е. как передать имя файла скрипту?

Извините, я не знаю....


Спасибо!

RaZEr 14.04.2004 22:12

$argc

Shkurik 15.04.2004 10:57

to Razer

$argc - ето как?

script.pl filename


listing script.pl:
open(file, filename);
while <file>
{....}

Извините за надоедливость...
Спасибо!

RaZEr 15.04.2004 14:32

Все аргументы в массиве @argv ($argc нет, это меня на си занесло). Имя файла, как несложно догадаться, будет в первом элементе этого массива.

rontommy 15.04.2004 16:55

Shkurik
Код:

$filename = shift @ARGV;
open(FILE, "$filename");
. . .

RaZEr
уточнение - ARGV большими буквами, тут вам не DOS ;)

Shkurik 15.04.2004 20:23

to all
т.е. если зделать такой скрипт script.pl

$filename = shift @ARGV;
printf($filename);

и потом запустить его так

script.pl file

в окне должно напечататься имя файла - file?
- у меня не работает......

????????

Ghost 15.04.2004 20:33

В скрипт параметры передаются следующим образом: script.pl?var1=value1&var2=value2 Для расшифровки этой строки вставь в скрипт строки:
Код:

# Get data from memory --------------------------------------------------------
if ($ENV{'REQUEST_METHOD'} eq "POST") {
  read(STDIN, $bufer, $ENV{'CONTENT_LENGTH'}); }
else {
  $bufer=$ENV{'QUERY_STRING'}; }   

# Decode data -----------------------------------------------------------------
@pairs = split(/&/, $bufer);
foreach $pair (@pairs) {
  ($name, $value) = split(/=/, $pair);
  $name =~ tr/+/ /;
  $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $value =~ tr/+/ /;
  $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
  $FORM{$name} = $value; }

Потом находи значение параметра по его имени:
Код:

my $par1 = $FORM{var1};
Теперь у тебя есть имя файла. Открываешь его и записываешь содержимое в массив:
Код:

open (FILE, "$par1");
my @indata = <FILE>;
close (FILE);

После чего можешь обрабатывать массив. Если файл бинарный, то для считывания его содержимого необходимо использовать такой код:
Код:

my $fsize = -s "$par1";
open (FILE, "$par1");
binmode (FILE);
sysread (FILE, $indata, $fsize);
close (FILE);


RaZEr 15.04.2004 20:38

Я бы конечно сказал "Ghost, старик, - мы тут шелл обсуждаем", если бы у меня небыло опасений ... хмм ...

Ghost 15.04.2004 20:46

RaZEr
Прошу прощения, если сморозил что не то, но по посту автора темы не понял, что ему нужен именно "шелл".

RaZEr 15.04.2004 20:50

Странно другое - почему не работает вариант:
Код:

$filename = shift @ARGV;
printf($filename);


rontommy 15.04.2004 21:35

Цитата:

Первоначальное сообщение от RaZEr
Странно другое - почему не работает вариант:
Код:

$filename = shift @ARGV;
printf($filename);


Так там написано "printf", а надо "print", не так ли ?

RaZEr 15.04.2004 21:57

Цитата:

Так там написано "printf", а надо "print", не так ли ?
По идее да. Я просто забыл что printf в перле отличается от printf в других языках.

Ghost 16.04.2004 10:32

Вложений: 1
RaZEr
Цитата:

Странно другое - почему не работает вариант
Ничего странного. Просто винда не передает параметры в скрипт. Нужно отредактировать описание типа файла pl следующим образом - см. аттач.

rontommy 16.04.2004 10:56

Цитата:

Ghost:
Ничего странного. Просто винда не передает параметры в скрипт. Нужно отредактировать описание типа файла pl следующим образом
Не знаю как у тебя, у меня на PC всегда работало без проблем, надо только сделать одно из двух :
1. Прописать Perl.ехе в переменной PATH, инсталляция это делает вроде автоматом, запускать все скрипты так :
Код:

perl.exe script.pl param1 param2 ...
2. Если по каким-либо причинам этого нет, запускать все скрипты так :
Код:

<C:\Path_to_install_Perl>\perl.exe script.pl param1 param2 ...
А вопрос был про PERL on Windows ?

Ghost 16.04.2004 11:00

rontommy
Если сделать то, что описал я, то можно будет запускать скрипты так:
Код:

script.pl param1 param2 ...
;)

rontommy 16.04.2004 11:25

Ghost
Кому как удобно, в твоем варианте больше 10 параметров не передашь, у меня все скрипты запускаются из контекстного меню, а не из DOSовского окна. Для шелла есть UNIX ;) !

Shkurik 16.04.2004 19:27

всем привет!
 
нда, такого обсуждалова я не ожидал....
может я не правильно понимаю -- я зарегистрил расширение .pl в винде, дальше
тэорэтычно запуская скрипт и через пробел имя файла - скрипт должен его обрабатывать?
.....


немного спустя:

опосля того как прописал как в картинке - все работает! век живи - век учись. Премного благодарен!!!!!
Всем!!!

тока дальше появляется вопрос (читаю документаху - на английском, может из-за етого трудности, ну и не программер я, это попытки решить маленькие локальные задачи) ... -а впрочем для начала нада маленько подчитать.

ЗЫ если это для Вас актуально - я проголосоваль!
для Rontommy - printf($filename) и print($filename) работают одинаково (в этом случае), поскольку не определено форматирование вывода.... кажется так?
Спасибо!

Ghost 21.05.2004 17:17

rontommy
Цитата:

в твоем варианте больше 10 параметров не передашь
Правильно. Но есть способ передачи любого количества параметров. Искал я его не долго, просто потребовалось это только сегодня, поэтому и верулся к этой теме только сейчас. Может кому понадобится: нужно прописать не
perl "%1" "%2" "%3" "%4" "%5"
(см. рисунок из предыдущего поста), а
perl "%0" %*
.


Часовой пояс GMT +4, время: 13:52.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.