Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Сообщения - xmolex

Страницы: 1 [2] 3 4 5
16
Perl / SQL запрос (обработка строки)
« : 22 Февраля 2008, 16:21:10 »
Я просто понял, что надо делать, а потом демонстрировать, потому что в противном случае отобьют всю охоту, даже если идея стоящая.
Что плохого в том, что я хочу работать с файлами используя облегченный sql синтаксис? К этой идее я шел долго и вот настрал тот момент, когда картина вылилась в готовый алгоритм. Вопросы только возникли с обработкой синтаксиса, решил поинтересоваться кто что может подсказать и вот вы подсказали.
Перепробовал около полтора десятка хостеров и у половины из них есть тарифные планы без баз данных. И что делать? Разумеется работать с файлами. А если я не хочу людей напрягать переписывать код, почему я не могу предоставить им возможность используя просто другой модуль работы с базой забыть о проблемах, когда у них нет MySQL или PostgreSQL?
Модуль пишется для конструктора сайтов, чтобы люди могли работать как с реляционой базой данных, так и с файловой. В шаблонах люди могут использовать SQL запросы для вывода.
Вот и весь сказ. Зачем вообще писать программы, если они не облегчают труд другим? Что касается того, что мой модуль может убить систему (я так понял данные), то я не дурак и проверку синтаксиса буду запускать до его выполнения.
Вообщем, спасибо за потраченное вами время.

17
Perl / SQL запрос (обработка строки)
« : 22 Февраля 2008, 15:31:23 »
Понятно, спасибо за комментарий.
P.S. я файлы и собирался использовать, только с урезанным SQL синтаксисом.

18
Perl / SQL запрос (обработка строки)
« : 22 Февраля 2008, 14:48:45 »
Цитировать
commander:
чувак... оставь эту идею...

Ну, я в принципе понимаю, что обработка команд достаточно сложна и сейчас я занимаюсь придумыванием колеса, но к сожалению исходников обработки синтаксиса я нигде не нарыл, а  также я понимаю что благодаря этому модулю, я могу сэкономить нервы многим, использующим этот проект у хостеров без поддержки баз данных. Хотелось бы по существу получать комментарии. Если у вас есть интересные мысли, то буду рад их услышать, если же нет, то и отписываться зачем?

19
Perl / SQL запрос (обработка строки)
« : 22 Февраля 2008, 12:05:47 »
Здравствуйте уважаемые. Пишу серьезный проект и понадобилось сделать небольшой модуль понимающий урезанный SQL для легкой замены баз данных.
Требуется разобрать команду:
SELECT `name` FROM table WHERE name = 1
Вы понимаете, что name может быть и без кавычек, а 1 может быть как в одинарных, так и в двойных кавычках, а также могут использоваться экранированные кавычки. Т.к. версия облегченная, то OR и т.п. использоваться не будет. Сделал разбор строки нижеуказанным кодом. Хотелось бы спросить у других, кто что думает. Можно ли облегчить алгоритм? Может кто знает другой алгоритм? Может как-то можно сэкономить ресурсы при выполнении?


$command = "SELECT `name` FROM table WHERE name = 1 ";
# разобрал с помощью регулярок. В $temp3 попало все после WHERE
          my$length = length($temp3);
          my($i,$flag,$pos_beg,$pos_end,$pos_beg_val,$pos_end_val);
          my$step = 0;
          my@temp3 = split(/|/, $temp3);
          for ($i = 0; $i < ($length+1); $i++)
           {
             if ($step == 0)
               {
                if ($temp3[$i] ne " ")
                 {
                   if ($temp3[$i] eq "`")
                     {
                       $flag = "`";
                       $pos_beg = $i;
                       $step = 1;
                       next;
                     }
                   else
                     {
                       $flag = " ";
                       $pos_beg = $i-1;
                       $step = 1;
                       next;
                     }
                 }
               }
             if ($step == 1)
               {
                if ($flag eq "`")
                  {
                    if ($temp3[$i] eq "`" && $temp3[$i-1] ne "\\\\")
                      {
                        $pos_end = $i;
                        $step = 2;
                        next;
                      }
                  }
                elsif ($flag eq " ")
                  {
                    if ($temp3[$i] eq " " || $temp3[$i] eq "=")
                      {
                        $pos_end = $i;
                        $step = 2;
                        next;
                      }
                  }
                }
             if ($step == 2) {if ($temp3[$i-1] eq "=") {$step = 3;}}
             if ($step == 3)
              {
                if ($temp3[$i] ne " ")
                 {
                   if ($temp3[$i] eq "\'")
                     {
                       $flag = "\'";
                       $pos_beg_val = $i;
                       $step = 4;
                       next;
                     }
                   elsif ($temp3[$i] eq "\\"")
                     {
                       $flag = "\\"";
                       $pos_beg_val = $i;
                       $step = 4;
                       next;
                     }
                   else
                     {
                       $flag = " ";
                       $pos_beg_val = $i - 1;
                       $step = 4;
                       next;
                     }
                 }
              }
             if ($step == 4)
              {
                if ($flag eq "\'")
                 {
                   if ($temp3[$i] eq "\'" && $temp3[$i-1] ne "\\\\")
                     {
                       $pos_end_val = $i;
                       last;
                     }
                 }
                if ($flag eq "\\"")
                 {
                   if ($temp3[$i] eq "\\"" && $temp3[$i-1] ne "\\\\")
                     {
                       $pos_end_val = $i;
                       last;
                     }
                 }
                elsif ($flag eq " ")
                 {
                   if ($temp3[$i] eq " " || $temp3[$i+1] eq "")
                    {
                      $pos_end_val = $i;
                      last;
                    }
                 }
              }
           }          
          my$temp4 = substr($temp3, $pos_beg_val+1, ($pos_end_val - ($pos_beg_val+1)));
          $temp3 = substr($temp3, $pos_beg+1, ($pos_end - ($pos_beg+1)));
# в $temp3 у нас название аргумента, в $temp4 значение аргумента.

20
Вообщем, решил отказаться от регулярных выражений в этом случае. Решил обрабатывать посимвольно строку. Если кому интересно, то http://forums.webscript.ru/showthread.php?s=&threadid=26519, но там уже perl.

21
Конкретно под этот пример бы подошло, но проблема в том, что заранее я не знаю значений. А если в качестве значения передадут текст:
    =     , тогда первое же выражение нарушит его.
Я имею ввиду, что может быть такая конструкция:

my $text = q|`name`=\'value\',  `name2`   =    \'value , \\ \'  =     value\'|;
my $text = q|`name`=\'value\',  `name2`   =    \'value , \\ \'  ,,,   =    ,,,   `````value\'|;
my $text = q|`name`=\'value\',  `name2`   =    \'value , \\ \'  value\'|;

Как видите после символа "=" мы встречаем окрывающую и закрывающую одинарную кавычку. Так вот между этими кавычками может быть все что угодно, даже символ одинарной кавычки, но он должен быть экранирован. Нужно просто убрать все пробелы, кроме тех которые являются значениями, т.к. значением может быть текст, а текст должен оставаться неизменным.

22
$text = qq|`name`=\'value\',  `name2`   =    \'value , \\\'  value\'|; # исходная строка
После некоторых действий должно получиться
$text = qq|`name`=\'value\',`name2`=\'value , \\\'  value\'|; # результат

Там где значение name2 по середине должна быть экранированная кавычка, но форум не дает это изобразить. Вообщем `name2`=\'value , \\ \'  value\', без пробела только между слешем и одинарной кавычкой. Надеюсь не запутал вас.

23
Ну, если вам не нравится "неудобный" вариант, то либо требуйте от хостера нормальной настройки, либо просто его смените. Решать вам. По другому вы проблему не решите.

24
А если сравнить дату последнего редактирования в теме и дату последнего посящения пользователя?

25
Если проблема в том, что вы не можете работать по ftp с созданными скриптом файлами, то можно сделать следующее: создавайте файл с правами 666. Вообще, хостер должен был сделать так, чтобы скрипты создавались под именем вашей учетной записи (делается это через suexec, если apache). Запустить скрипт с именем другого пользователя у вас не получится, т.к. вы работаете не с шеллом, а с веб-сервером. Вообщем, у вас два пути, либо разбираться со службой тех поддержки, либо использовать при создании права для папок 777, для файлов 666.

26
Здравствуйте. Прошу помочь с написанием правильного выражения. Пишу на Perl, но думаю, что правильнее задать вопрос в этом разделе.
Имеется строка:
`name`=\'value\',  `name2`   =    \'value , \\\'  value\'
Как я могу вырезать все пробелы, кроме тех которые заключены между ` или \' Перепробовал уже массу вариантов, но находятся случаи, при которых работа будет выполнена не верно. Очень надеюсь на помощь.

27
Perl / $$$
« : 29 Июня 2007, 17:25:46 »
Скажите уважаемые, а что сие значит: $$$a. Просто как-то проходил тест и был вопрос с куском кода в котором было сие. Извините, если вопрос ламерский, но узнать очень хочется.

28
Perl / При uploade скрипт сохраняет tmp
« : 22 Мая 2007, 18:57:53 »
Не думаю, что в этом виноват этот код. Поболее кода в студию.

29
Perl / perl и база 1C
« : 16 Мая 2007, 16:26:00 »
Хм. Спасибо. Попробую вникнуть.

30
Perl / perl и база 1C
« : 16 Мая 2007, 15:32:22 »
Нашел, что существует Web-расширение для 1С (http://myforum.net.ua/index.php?showtopic=8521&st=40), но это не совсем то. Оно может работать только на IIS, через ASP. Пока вижу один вариант - работать перлом через сайт на asp, но согласитесь - это не то. Может кто что подскажет?

Страницы: 1 [2] 3 4 5