Модераторы: korob2001, ginnie

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как получить значения параметров команды? Параметры с пробелами! 
:(
    Опции темы
CrazyDiamond
Дата 22.11.2005, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 21.11.2005
Где: Москва

Репутация: нет
Всего: нет



Если параметры команды - qwe123 qwe 123 q w e123
qwe123 - параметр1
qwe 123 - параметр2
q w e123 - параметр3
То что будет содержаться в $te,$art и $charge ?

Цитата
И дальше что у тебя с этими переменными происходит?

Я их хочу использовать в запросе:
where bestand.ltenr=$te
and art_ref.szartnr=$art
and bestand.szcharge=$charge
PM MAIL ICQ   Вверх
sharq
Дата 22.11.2005, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 23
Всего: 28



Цитата(Kiber_rat @ 22.11.2005, 17:50)
`perl -e 'use strict;'`   

Ай-яй-яй! smile
Код

`perl -Mstrict -e"my ($te,$art,$charge)=@ARGV;"`


CrazyDiamond

Цитата(CrazyDiamond @ 22.11.2005, 18:19)
Если параметры команды - qwe123 qwe 123 q w e123
qwe123 - параметр1
qwe 123 - параметр2
q w e123 - параметр3

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

program "qwe123" "qwe 123" "q w e123"

Если через переменные, то
Код

my $te = "qwe123";
my $art = "qwe 123";
my $charge = "q w e123";

`program $te $art $charge`;

Если через @ARGV, то
Код

my ($te,$art,$charge)=@ARGV;
`program $te $art $charge`;

или
Код

`program @ARGV`;


И все будет окей, и чего ты прицепился к этим пробелам? Они экранируются, если ты их задаешь не вручную, а через переменные!

smile

Это сообщение отредактировал(а) sharq - 22.11.2005, 17:42


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
CrazyDiamond
Дата 22.11.2005, 17:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 21.11.2005
Где: Москва

Репутация: нет
Всего: нет



Блин, я их не задаю, я их должен извлечь, а задаются они другой программой! (см начало)
Эта "программа" не знает какая строка в какой переменной сидит и я не вижу способа заставить её понять это! smile
PM MAIL ICQ   Вверх
korob2001
Дата 22.11.2005, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Млин, ну ты даёшь. Я вообще уже нифига не пойму.
Смотри вот так излекаются параметры:
Код

my( $te, $art, $charge) = @ARGV;

# Здест строишь запрос к базе
my $sql = "SELECT * FROM TableName ";
$sql .= "WHERE bestand.ltenr='$te' ";
$sql .= "AND art_ref.szartnr='$art' ";
$sql .= "AND bestand.szcharge='$charge'";

# Теперь переменная $sql содержит строку запроса
# Здесь делаешь этот запрос к базе

Вот и всё, я просто с Informix никогда не работал, если хочешь могу привести пример работы с MySQL, хотя с другой стороны я тебе уже привёл пример класса. Посмотри его код, он расчитан на MySQL, но его так же легко настроить и на другую БД.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Kiber_rat
Дата 22.11.2005, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MACMANIAC
**


Профиль
Группа: Участник
Сообщений: 276
Регистрация: 18.4.2002
Где: Ashdod, Israel

Репутация: 7
Всего: 9



sharq Чего ай-ай? smile Я цитировал код CrazyDiamond-а! smile


--------------------
Best regards!                                                             
@..@_____Ku6ep
=*=______\______KPbIC
Код
print join "",map{chr}(split/(\w{2})/,hex(int(2175.57302796298**2)))
PM WWW ICQ Skype Jabber YIM   Вверх
CrazyDiamond
Дата 22.11.2005, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 21.11.2005
Где: Москва

Репутация: нет
Всего: нет



korob2001, я тоже не знаю как правильно в информиксе, но делаю это такsmile
Запрос из шэла, имеется ввиду.
echo "трали-вали" | /home/informix/bin/dbaccess xlvs

Завтра приедет начальник, если скажет - разбирайся сам, то попробую get.szmhdat целиком выполнить на перле и дать расширение .pl.
Попробую сделать как korob2001 посоветовал в последнем посте. Хотя как из переменной $sql сделать запрос в перле к информиксу я не знаю.
PM MAIL ICQ   Вверх
korob2001
Дата 23.11.2005, 01:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Залей и установи следующий модуль:

DBD::Informix
http://search.cpan.org/~johnl/DBD-Informix....02/Informix.pm

DBI
http://search.cpan.org/~simkin/Apache-Logg...DBI-0.12/DBI.pm

Добавлено @ 01:49
Залей и установи следующий модуль:

DBD::Informix
http://search.cpan.org/~johnl/DBD-Informix....02/Informix.pm

DBI
http://search.cpan.org/~simkin/Apache-Logg...DBI-0.12/DBI.pm

Примеры смотри там же.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
sharq
Дата 23.11.2005, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Perl Liker
**


Профиль
Группа: Участник
Сообщений: 841
Регистрация: 13.12.2004
Где: Ростов-на-Дону

Репутация: 23
Всего: 28



CrazyDiamond давай поступим так - ты выкладывай сюда свои два скрипта и мы посмотрим, что там не так, а-то ты уже столько времени не можешь толком объяснить что не так. smile

Так что ждем скрипты.

smile


--------------------
[color=gray]There's More Than One Way To Do It[/color]
PM MAIL WWW ICQ Skype   Вверх
CrazyDiamond
Дата 23.11.2005, 13:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 21.11.2005
Где: Москва

Репутация: нет
Всего: нет



Давайте немного отвлечёмсяsmile
Есть фрагмент шел кода:
Код

te=$1 #передача первого параметра, он не может содержать пробелы.
shift    #сдвиг, первый параметр нам больше не нужен.

art=`perl -e '$_ = '$*'; $a1 =~ s/\[\[\[\[(\w*)\]\]\]\] \[\[\[\[(\w*)\]\]\]\]/$1/; print $a1'`

#присваиваю общей переменной $_ значение всех параметров команды ($*), сравниваю $_ с первой переменной, #которую perl должен по идее сам должен вычленить из $*. И найденную первую переменную записываю в $a1

echo $a1 "a1"   #не выводится
echo $1 "1"       #выводится со скобками
echo $art "art"  #не выводится
exit


Команда запускается так:
./get.szmhdat_new 803751 [[[[21967-142]]]] [[[[30504/01.03.073]]]]

Вопрос: почему ничего не записывается в a1 и следовательно art? Хотя $1 содержит то,что нужно. Только со скобками=)
PM MAIL ICQ   Вверх
Kiber_rat
Дата 23.11.2005, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MACMANIAC
**


Профиль
Группа: Участник
Сообщений: 276
Регистрация: 18.4.2002
Где: Ashdod, Israel

Репутация: 7
Всего: 9



Потому что вот тут
Код

perl -e '$_ = '$*'
надо использовать двойные кавычки, вот так
Код

perl -e '$_ ="$*"
если я правильно понял то вместо $* должно подставиться значение? Только вот какую переменную ты имеешь тут ввиду? Шеловскую или перловскую?


--------------------
Best regards!                                                             
@..@_____Ku6ep
=*=______\______KPbIC
Код
print join "",map{chr}(split/(\w{2})/,hex(int(2175.57302796298**2)))
PM WWW ICQ Skype Jabber YIM   Вверх
CrazyDiamond
Дата 23.11.2005, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 21.11.2005
Где: Москва

Репутация: нет
Всего: нет



Я имею ввиду, что $* = все параметры команды...Для шела эта так,если я не ошибаюсь.
perl -e '$_ ="$*" даёт тот же результат.

PM MAIL ICQ   Вверх
Kiber_rat
Дата 23.11.2005, 14:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


MACMANIAC
**


Профиль
Группа: Участник
Сообщений: 276
Регистрация: 18.4.2002
Где: Ashdod, Israel

Репутация: 7
Всего: 9



Попробуй так:
Код
art=`perl -e ';$ARGV[0] =~ s/\[\[\[\[(\w*)\]\]\]\] \[\[\[\[(\w*)\]\]\]\]/$1/; print $ARGV[0]' $*`



--------------------
Best regards!                                                             
@..@_____Ku6ep
=*=______\______KPbIC
Код
print join "",map{chr}(split/(\w{2})/,hex(int(2175.57302796298**2)))
PM WWW ICQ Skype Jabber YIM   Вверх
korob2001
Дата 23.11.2005, 15:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2871
Регистрация: 29.12.2002

Репутация: 31
Всего: 61



Попробуй такое регулярное выражение:
Код

$a1 =~ s/\[+(.*?)\]+\s+\[+(.*?)\]+/$1/;

Хотя не понятно зачем ты захватываешь второй параметр, если он у тебя отбрасывается.
Может тебе нужно это?
Код

$a1 =~ s/\[+(.*?)\]+\s+\[+(.*?)\]+/$1 $2/;

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

$a1 =~ s/\[+(.*?)\]+\s+\[+.*?\]+/$1/;

Или же оставь, но тогда не далай захвата:
Код

$a1 =~ s/\[+(.*?)\]+\s+\[+(?:.*?)\]+/$1/;


Это сообщение отредактировал(а) korob2001 - 23.11.2005, 15:35


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
Guest
Дата 24.11.2005, 11:58 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Kiber_rat @ 23.11.2005, 14:59)
Попробуй так:
Код
art=`perl -e ';$ARGV[0] =~ s/\[\[\[\[(\w*)\]\]\]\] \[\[\[\[(\w*)\]\]\]\]/$1/; print $ARGV[0]' $*`

Kiber_rat, сделал как ты предложил:
Код


#!/bin/sh
export ONCONFIG=onconfig.neo
export INFORMIXSQLHOSTS=/home/informix/etc/sqlhosts
export INFORMIXDIR=/home/informix
export INFORMIXSERVER=onlinex
export CLIENT_LOCALE=ru_RU.CP1251
export DB_LOCALE=ru_RU.CP1251
export SERVER_LOCALE=ru_RU.8859-5

te=$1
shift

art=`perl -e ';$ARGV[0] =~ s/\[\[\[\[(\w*)\]\]\]\] \[\[\[\[(\w*)\]\]\]\]/$1/; print $ARGV[0]' $*`
charge=`perl -e ';$ARGV[0] =~ s/\[\[\[\[(\w*)\]\]\]\] \[\[\[\[(\w*)\]\]\]\]/$2/; print $ARGV[0]' $*`

echo $1 "1"
echo $2 "2"
echo $art "art"
echo $charge "charge"
exit

Получаю:

Цитата
[[[[10706154]]]] 1
[[[[03-0030-05]]]] 2
[[[[10706154]]]] art
[[[[10706154]]]] charge

То есть параметр 1 и 2 воспринимаются как бы правильно, только скобки лишние....
Но в charge не записывается второй параметрsmile
Что означает $*` в конце перловой строки?

Цитата
Хотя не понятно зачем ты захватываешь второй параметр, если он у тебя отбрасывается.
Может тебе нужно это?

Мне нужно извлечь все три параметра. С первым, я надеюсь, вопросов нет? Второй я захватываю в переменную art, третий - в charge.
Я не могу сделать просто te=$1
art=$2 и charge=$3 потому,что во втором и третем параметры могут быть пробелы, понимаешь?
  Вверх
Гость_CrazyDiamond
Дата 24.11.2005, 12:02 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Суть вопроса наверное сводится к тому, что бы откинуть скобки, что бы в art записалось 10706154, а в charge 03-0030-05 или 03 0030 05,если этот параметр так будет передан.
  Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0591 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.