parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Не парситься конструкция

serglif 13.10.2004 10:57

Вот несколько выкушенный из контекста, кусок кода, который должен искать в задаваемых столбцах таблицы обработанные варианты запроса (обработанные - это когда пользователь спросил "молоток", а программа ищет "молоток", "Молоток", "МОЛОТОК". Понятно, что если используется LIKE в СУБД, то эта обработка излишняя, но допустим, что в примере такой возможности нет и таблица грузится из файла)
#Следующие три конструкции добавлены для некоторого контекста
$table[client]
$question['завод']
$items[^table::load[${table}.cfg]]

#Задаются поля, в которых необходимо искать
$searchfields[
              $.client[
                  $.0[name]
                  $.1[ur_name]
                  $.2[phones]
               ]
              ]

#Обрабатывается исходный запрос и создается хэш новых
$question[^question.trim[]]
$character[^question.left(1)] $character[^character.upper[]]
$word[^question.mid(1)] $word[^word.lower[]]

$questions[
           $.1[^question.upper[]]
           $.2[^question.lower[]]
           $.3[${character}${word}]
          ]

#Вот собственно конструкция, которая не хочет парситься!
  $items[^items.select(
   ^searchfields.$table.foreach[key;value]{
    ^questions.foreach[nkey;nvalue]{
     (^items.[$value].pos[$nvalue]>-1)
    }[||]
   }[||]
  )]
Результат исполнения последней конструкции:

invalid number (double)
(-1>-1) || (16>-1) || (-1>-1) || (-1>-1) ....

Вопрос: Можно ли как-то иначе и правильно составить такую конструкцию без выноса кода в дополнительную процедуру, вызываемую из select-а?