Работа со строкой

Решение вопросов при работе с TCL скриптами.

Модератор: Модераторы

Работа со строкой

Сообщение artemn » 11 дек 2008 03:05

Второй день как узнал о Tcl :mrgreen:

Необходимо в скрипте expect использующем язык Tcl, разбить ip адрес по октетам и значение каждого из них присвоить переменной.

К примеру set ip 10.20.30.40

чтобы a=10 b=20 c=30 d=40

Благодарю за помощь )
artemn
 
Сообщения: 7
Зарегистрирован: 11 дек 2008 02:59
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Работа со строкой

Сообщение anaesthesia » 11 дек 2008 05:40

Код: Выделить всё
set ip "10.20.30.40"
regexp -- {(\d+)\.(\d+)\.(\d+)\.(\d+)} $ip - a b c d

или
Код: Выделить всё
set ip "10.20.30.40"
set ipl [split $ip .]
set a [lindex $ipl 0]
set b [lindex $ipl 1]
set c [lindex $ipl 2]
set d [lindex $ipl 3]
Аватара пользователя
anaesthesia
 
Сообщения: 3
Зарегистрирован: 19 авг 2008 19:00
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Работа со строкой

Сообщение tvrsh » 15 дек 2008 14:42

lindex - Команда извлекает элемент списка: http://wiki.egghelp.ru/Lindex
split - Команда разделяет строку на части и создает из них правильный Tcl-список: http://wiki.egghelp.ru/Split
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Работа со строкой

Сообщение artemn » 17 дек 2008 15:35

Спасибо, помогли теперь хоть знаю где глядеть.

Сейчас думаю как бы реализовать вот это

Код: Выделить всё
switch $octet2 \
  "1..100"          "puts $octet1" \ 
  "101,150,200"   "puts $octet2" \
  "201..254"   "puts $octet3" \
  "default"         "puts $octet4" \


1..100 такой и 101,150,200 способы он не принимает, может есть в синтаксисе tcl возможность указания диапазона значений для switch ?

‘[0-9]’ Нашел вот такой вот синтаксис, но он тоже не работает. (
artemn
 
Сообщения: 7
Зарегистрирован: 11 дек 2008 02:59
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Работа со строкой

Сообщение tvrsh » 20 дек 2008 12:47

По поводу switch пока не могу подсказать, попробуй использовать if.
Have fun.
-
Получить помощь можно на каналах #egghelp в сети IrcNet.ru и #eggdrop в сети RusNet(Ключ канала eggdrop).
Перед созданием новой темы внимательно читайте Правила оформления топиков.
Аватара пользователя
tvrsh
 
Сообщения: 1230
Зарегистрирован: 19 авг 2008 16:55
Откуда: Russian Federation, Podolsk
Благодарил (а): 6 раз.
Поблагодарили: 130 раз.
Версия бота: Eggdrop 1.6.20+suzi

Re: Работа со строкой

Сообщение anaesthesia » 20 дек 2008 21:10

Код: Выделить всё
 
switch 1 \
[expr {$sw>0 && $sw<100}] {puts $octet1} \
[expr {$sw == 101 || $sw == 150 || $sw == 200}] {puts $octet2} \
default {puts $octet4}
Аватара пользователя
anaesthesia
 
Сообщения: 3
Зарегистрирован: 19 авг 2008 19:00
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.

Re: Работа со строкой

Сообщение artemn » 23 дек 2008 13:05

Пока вот так скрипт сделал

Код: Выделить всё
regexp -- {(\d+)\.(\d+)\.(\d+)\.(\d+)} $ip - octet1 octet2 octet3 octet4
set vpngw 0
switch $octet2\
"1"   {set mask 255.255.0.0; set gw $octet1.$octet2.0.2}\
"2"   {set mask 255.255.0.0; set gw $octet1.$octet2.0.2}\
"3"   {set mask 255.255.0.0; set gw $octet1.$octet2.0.2}\
"4"   {set mask 255.255.0.0; set gw $octet1.$octet2.0.2}\
"5"   {set mask 255.255.0.0; set gw $octet1.$octet2.0.2; set vpngw vpn-gw1.mns.ru}\
"6"   {set mask 255.255.0.0; set gw $octet1.$octet2.0.2; set vpngw vpn-gw2.mns.ru}\
"7"   {set mask 255.255.0.0; set gw $octet1.$octet2.0.2; set vpngw vpn-gw3.mns.ru}\
"8"   {set mask 255.255.0.0; set gw $octet1.$octet2.0.2; set vpngw vpn-gw1.mns.ru}\
"9"   {set mask 255.255.0.0; set gw $octet1.$octet2.0.2; set vpngw vpn-gw2.mns.ru}\
"10"   {set mask 255.255.0.0; set gw $octet1.$octet2.0.2; set vpngw vpn-gw3.mns.ru}\
"20"   {set mask 255.255.240.0; set gw $octet1.$octet2.[expr [expr $octet3/16]*16].2}\
"21"   {set mask 255.255.240.0; set gw $octet1.$octet2.[expr [expr $octet3/16]*16].2}\
"50"   {set mask 255.255.240.0; set gw $octet1.$octet2.[expr [expr $octet3/16]*16].2; set vpngw vpn-gw1.mns.ru}\
"51"   {set mask 255.255.240.0; set gw $octet1.$octet2.[expr [expr $octet3/16]*16].2; set vpngw vpn-gw1.mns.ru}\
"70"   {switch $octet3\
   "228"   {set mask 255.255.255.0; set gw $octet1.$octet2.$octet3.1}\
   "229"   {set mask 255.255.255.224; if "$octet4 <= 30" "set gw $octet1.$octet2.$octet3.1"\
                  else {if "$octet4 >= 66" "set gw $octet1.$octet2.$octet3.65"\
                  else "set gw $octet1.$octet2.$octet3.33"}}\
   "230"   {set mask 255.255.255.192; set gw $octet1.$octet2.$octet3.65}\
   "233"   {set mask 255.255.255.0; set gw $octet1.$octet2.$octet3.1}\
   "238"   {set mask 255.255.255.240; set gw $octet1.$octet2.$octet3.1}\
   "default"   {set mask 255.255.255.252; set gw $octet1.$octet2.$octet3.[expr $octet4-1]}}

Попробую по подсказке anaesthesia оптимизировать.
artemn
 
Сообщения: 7
Зарегистрирован: 11 дек 2008 02:59
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.


Вернуться в TCL скрипты

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

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

cron