VIDEOCHAT  ::   FAQ  ::   Поиск  ::   Регистрация  ::   Вход

Кавычки и пробелы в переменных и выражениях

Новичком считается только что прочитавший «Астериск - будущее телефонии»
http://asterisk.ru/knowledgebase/books
и пытающийся сделать большее

Модераторы: april22, Zavr2008

Ответить
imho
Сообщения: 4
Зарегистрирован: 12 июл 2012, 13:53

Кавычки и пробелы в переменных и выражениях

Сообщение imho »

Подскажите как правильно записать следующее выражение

Код: Выделить всё

same => n,Set(operator-info=${IF($["${operator}"!=""]?[${operator}, ${region}])})
Дело в том что если в переменной operator встретятся кавычки, то будет синтаксическая ошибка и WARNING
(syntax error: syntax error, unexpected '<token>', expecting $end)

Дополнительный вопрос как можно в аргументах функции IF использовать пробелы, например

Код: Выделить всё

same => n,Set(operator-info=${IF($["${operator}"!=""]? [${operator}, ${region}])})
пробел в начале второго аргумента будет выкинут
ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: Кавычки и пробелы в переменных и выражениях

Сообщение ded »

Что-то там у Вас каша. Я ничего не понял.
Разбейте сложную логику выражения на несколько простых операндов, вставляйте везде проверки NoOp, так и разберётесь.
Кавычки = спецсимволы, не надо их использовать в переменной "${operator}. Если это имя и фамилия, то запишите это хоть с пробелом. Как в конечном виде будет выглядеть содержимое переменной operator-info можно только догадываться. Это будет что-то типа Vasilij Pechkin, Voronezh obl. ?? Так это задумывается?
NoOp(operator-info is ${operator-info})
operator-info is Vasilij Pechkin, Voronezh obl.
imho
Сообщения: 4
Зарегистрирован: 12 июл 2012, 13:53

Re: Кавычки и пробелы в переменных и выражениях

Сообщение imho »

Попробую переформулировать вопрос: как можно экранировать специальные символы в переменных? Или как использовать переменные чтобы спецыальные символы в переменных не влияли на вычисление выражения?
ded писал(а):Разбейте сложную логику выражения на несколько простых операндов, вставляйте везде проверки NoOp
Понял, из выражения не достаточно очевидно где происходит ошибка. Тогда так:

Код: Выделить всё

same => n,NoOp($["${operator}"!=""])
это достаточно простое выражение?
Как его записать чтобы кавычки в переменной не приводили синтаксической ошибке?

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

Очень не хочется приводить конкретные данные, ибо вопрос не в том как бы записать имя и фамилию без кавычек. Допустим operator = ПАО "Мобильные ТелеСистемы", В operator-info хотелось увидеть такую строчку:

Код: Выделить всё

пробел[ПАО "Мобильные ТелеСистемы", Приморский край]
Так вот функция IF тоже не без сюрпризов:

Код: Выделить всё

IF(условие? <=вот_этот_пробел_в_начале_аргумента_исчезает)
PS. Вот что-то я не могу даже приблизительно найти как это должно правильно записываться…
Samael28
Сообщения: 1057
Зарегистрирован: 08 янв 2011, 18:32
Откуда: Киев
Контактная информация:

Re: Кавычки и пробелы в переменных и выражениях

Сообщение Samael28 »

Код: Выделить всё

same => n,NoOp($["x${operator}" != "x"])
Старайтесь избегать пустых строк :)
Мой профайл на Upwork
ded
Сообщения: 15625
Зарегистрирован: 26 авг 2010, 19:00

Re: Кавычки и пробелы в переменных и выражениях

Сообщение ded »

imho, я вижу (это моё IMHO), что пытаетесь двухмерный массив записывать как одномерный

Код: Выделить всё

     [ПАО "Мобильные ТелеСистемы", Приморский край]
да ещё и со спецусловиями: пробелами и кавычками в переменных. Может бы лучше подумать об обработке через agi + mysql? Точно знаю - гибкости и возможностей будет больше.
Аватара пользователя
zzuz
Сообщения: 1658
Зарегистрирован: 21 сен 2010, 13:33
Контактная информация:

Re: Кавычки и пробелы в переменных и выражениях

Сообщение zzuz »

Видимо вопрос стоит в том , что нужно экранировать спецсимволы в строках. Хотя тут без разницы где. Делать это нужно как и везде , через обратный слэш .
Линия24 - Системы Массового Телефонного Обслуживания
whoim
Сообщения: 766
Зарегистрирован: 26 ноя 2013, 23:25
Откуда: Краснодар
Контактная информация:

Re: Кавычки и пробелы в переменных и выражениях

Сообщение whoim »

Предварительно обрабатывайте строку: http://www.voip-info.org/wiki/view/Aste ... nc+REPLACE для удаления, или лучше
http://www.voip-info.org/wiki/view/Asterisk+func+quote
облачные и локальные сервера asterisk/freepbx/a2billing/crm с полной техподдержкой. skype: whoim2, sipuri: whoim@asterisk.ru
imho
Сообщения: 4
Зарегистрирован: 12 июл 2012, 13:53

Re: Кавычки и пробелы в переменных и выражениях

Сообщение imho »

Почему-то в $[…] экранирование не помогает

Код: Выделить всё

same => n,NoOp($[${QUOTE(${operator})}!=""])
приводит к тому-же результату, или я неправильно экранирую?

результатом ${QUOTE(${operator})} будет "ПАО \"Мобильные ТелеСистемы\"" — вроде всё верно, но $[…] игнорирует эти слеши

PS. Да, возможно в данном случае поможет удаление кавычек из переменной, если конечно допустить что строка, стостоящая из одной или более кавычек — это пустая строка.

PPS. На данный момент вот такой вариант оказался наиболее рабочим:

Код: Выделить всё

same => n,NoOp($[${LEN(${operator})}>0])
да, я пробовал его раньше, но видимо где-то ошибался

также в моём случае подходит

Код: Выделить всё

same => n,NoOp($[${EXISTS(${operator})}])
поскольку переменные operator и region устанавливает следующий код

Код: Выделить всё

same => n,MySQL(Fetch fetchid ${resultid} operator region)
whoim
Сообщения: 766
Зарегистрирован: 26 ноя 2013, 23:25
Откуда: Краснодар
Контактная информация:

Re: Кавычки и пробелы в переменных и выражениях

Сообщение whoim »

Я предполагал, что экранировать будете на этапе присвоения значения. Но с len тож отлично вышло!
облачные и локальные сервера asterisk/freepbx/a2billing/crm с полной техподдержкой. skype: whoim2, sipuri: whoim@asterisk.ru
Ответить
© 2008 — 2024 Asterisk.ru
Digium, Asterisk and AsteriskNOW are registered trademarks of Digium, Inc.
Design and development by PostMet-Netzwerk GmbH