Страница 1 из 1

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

Добавлено: 13 фев 2016, 17:16
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}])})
пробел в начале второго аргумента будет выкинут

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

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

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

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

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

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

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

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

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

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

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

IF(условие? <=вот_этот_пробел_в_начале_аргумента_исчезает)
PS. Вот что-то я не могу даже приблизительно найти как это должно правильно записываться…

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

Добавлено: 14 фев 2016, 22:24
Samael28

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

same => n,NoOp($["x${operator}" != "x"])
Старайтесь избегать пустых строк :)

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

Добавлено: 14 фев 2016, 22:42
ded
imho, я вижу (это моё IMHO), что пытаетесь двухмерный массив записывать как одномерный

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

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

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

Добавлено: 14 фев 2016, 23:40
zzuz
Видимо вопрос стоит в том , что нужно экранировать спецсимволы в строках. Хотя тут без разницы где. Делать это нужно как и везде , через обратный слэш .

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

Добавлено: 14 фев 2016, 23:43
whoim
Предварительно обрабатывайте строку: http://www.voip-info.org/wiki/view/Aste ... nc+REPLACE для удаления, или лучше
http://www.voip-info.org/wiki/view/Asterisk+func+quote

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

Добавлено: 15 фев 2016, 22:20
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)

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

Добавлено: 16 фев 2016, 02:53
whoim
Я предполагал, что экранировать будете на этапе присвоения значения. Но с len тож отлично вышло!