Forum Webscript.Ru

Программирование => Perl => Тема начата: sun от 18 Июля 2003, 10:56:30

Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 18 Июля 2003, 10:56:30
Есть у меня файлик, который ежедневно выгружается на сервак из моей базы данных (по другому не сделаешь). Это текстовый файл. В нем около 4500 строк, размер около 400-500кб. Решил написать поиск по этому файлу (в файле прайс, с ценами, в перемешку с тегами), но думаю просто тупым перебором ничего не выйдет хорошего. Может подскажете чего, а если семпл программы на Perl, так просто совсем будет здорово.

С уважением и почтением.
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: Wyclef от 18 Июля 2003, 12:14:11
А, что мешает сделать поиск по базе?..
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 21 Июля 2003, 02:26:10
Да вобщем много всяких, но. Первая, это то что база работате под SQL Pervasive, жуткая штука, в общем удалось победить через ODBC, но только он так долго обрабатывает запросы минута и более. Вторая причина, мне просто не дали доступа к серваку с базами , поэтому пришлось решать вопрос экспортом базы в *.тхт файлы, а в шедулере задавать каждые 3-4 часа эту выгрузку.

Спасибо за ответ.
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: Chs от 21 Июля 2003, 09:23:47
DBD::CSV ?
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 21 Июля 2003, 09:50:42
Нверное я все таки "ламер", но что это такое DBD::CSV ?
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: Chs от 21 Июля 2003, 13:41:31
http://search.cpan.org/author/JZUCKER/DBD-CSV-0.2002/
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 23 Июля 2003, 08:51:36
Сапасибо за ссылку, будем почитать, хотя там все по буржуйски написано.
Тут мне в голову еще один вариант пришел, у меня есть возможность выгружать, данные в *.dbf формате, в принципе этот формат насколько я  знаяю MySQL поддерживает, точно не знаю. Что скажешь?
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: Wyclef от 23 Июля 2003, 09:28:58
[off]sun ну ты, че? Ты бы еще сказал cpan.org классный сайт, но там все по буржуйски...[/off]
Цитировать
насколько я знаяю MySQL поддерживает, точно не знаю.

Так ты хочешь в МySQL все заливать? Есть некие конвертеры dbf2mysql.
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 23 Июля 2003, 10:09:36
Про буржуев это я зря, признаю, ведь все люди БРАТЬЯ.
Идея с MySQL мне импонирует больше, а ссылочку на конвертер, а мож примерчик реализации такого рода задачи.

Все равно спаибо.
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 23 Июля 2003, 10:32:41
Програмульку нашел уже. Пасибо.
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: Wyclef от 23 Июля 2003, 10:36:15
Это не скрипты, а утилиты. Сам не юзал, так что ничего сказать не могу - смотри readme внутрях: для unix (http://www.mysql.com/downloads/download.php?file=Downloads/Contrib/dbf2mysql-1.13.tgz&pick=mirror), для win32 (http://www.mysql.com/downloads/download.php?file=Downloads/Contrib/dbf2mysql.zip&pick=mirror).
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 25 Июля 2003, 09:52:12
Я тут поэкспериментил, нашел простенький скрипт, котрый работает с CSV-файлом, меня главным образом интересовала скорость поиска. Скорость вполне, единственно, что в этом скрипте, поиск происходит только по ключевому слову, он например не может разбивать фразу, и искать и выстравиать строики  по возрастанию и т. п.
Ведь наверное есть такой скрипт который работает с CSV базой, ищет в ней и результаты поиска отображает на экране и т. д.
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: Wyclef от 25 Июля 2003, 10:04:51
Цитировать
sun:
он например не может разбивать фразу, и искать и выстравиать строики по возрастанию

CSV далеко не MS[y]SQL. :) Chs же тебе указал куда смотреть надо, а как напишешь это уже от тебя зависит, ты же с DBI знаком надеюсь...
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 25 Июля 2003, 10:13:45
Нет с DBI не знаком, что это такое? Насколько я понимаю это какя-то библиотека.
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: Phoinix от 25 Июля 2003, 10:16:35
sun
Тогда лучше познакомится :-), это модуль (можно сказать и библиотека) которая как раз таки работает с базами данных...
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: Wyclef от 25 Июля 2003, 10:23:45
DBI - Database independent interface for Perl
BDB::CSV - драйвер для работы с CSV файлами средствами SQL.
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 25 Июля 2003, 10:24:49
О каких базах идет речь: PostgreSQL, MySQL или обычные текстовые файлы? Если возможно с помощью этого модуля подключаться к текстовой базе (например в *.CSV формате), тоды конечно стоит поковырятьс. И еще какие возможности, например: поиск по текстовой базе и т. д.
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 25 Июля 2003, 10:36:35
А где бы примерчик посмотреть и документашку, что-нибудь простое. Вроде это то что надо.
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: Phoinix от 25 Июля 2003, 10:41:25
sun
DBI как сказал Wyclef только интерфейс Perl для работы с базами данных, а дальше устанавливаешь модули (драйвера) для той базы данных, которая тебе нужна, Выдержка из CPAN:

DBD::
::ASAny            adcO? Adaptive Server Anywhere Driver for DBI
::Altera           bdpO? Altera SQL Server for DBI - pure Perl code
::CSV              adcO? SQL engine and DBI driver for CSV files
:: DB2              adcO? DB2 Driver for DBI
::Empress          adcO? Empress RDBMS Driver
::FreeTDS          adcO? DBI driver for MS SQLServer and Sybase
::SearchServer     cdcO? PCDOCS/Fulcrum SearchServer Driver for DB
::Illustra         bmcO? Illustra Driver for DBI
::Informix         amcO? Informix Driver for DBI
::Informix4        adcO? DBI driver for Informix SE 4.10
::Ingres           bmcO? Ingres Driver for DBI
::Multiplex        RmpO? Spreading database load across servers
::ODBC             amcO? ODBC Driver for DBI
::Oracle           MmcO? Oracle Driver for DBI
::QBase            amcO? QBase Driver for DBI
::RAM              bmpO? a DBI driver for files and data structures
::SQLrelay         bdpO? SQLrelay driver for DBI
::Solid            amcO? Solid Driver for DBI
::Sqlflex          RdcO? SQLFLEX driver for DBI
::Sybase           bmcO? Sybase Driver for DBI
::Unify            bdcO? Unify driver for DBI
::XBase            RmpO? XBase driver for DBI
::mSQL             RmcO? Msql Driver for DBI
::mysql            RmcO? Mysql Driver for DBI
:: pNET             amcO? DBD proxy driver
::InterBase        bmcO? DBI driver for InterBase RDBMS server
::RDB              Rdof? DBI driver for Oracle RDB (OpenVMS only)
:: DtfSQLmac        RdpO? dtF/SQL (Mac OS edition) driver for DBI
::ADO              bmpO? Database interface modules of MS ADO for DBI
::Excel            adpO? Excel database driver for the DBI module
::Recall           adpOp Transparent database replication layer
::Sprite           RdpO? Sprite driver
::PrimeBase        bmc?p A primeBase database interface
::mysqlPP          bdpOp Pure Perl MySQL driver for the DBI
::PgPP             bdpOp Pure Perl PostgreSQL driver for the DBI

Выбирай любой... :-)
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: Phoinix от 25 Июля 2003, 10:44:45
http://search.cpan.org/author/TIMB/DBI-1.37/ (http://search.cpan.org/author/TIMB/DBI-1.37/)
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 25 Июля 2003, 11:00:09
Да информации там завались, буду читать. САПАСИБО!!!

Я еще вернусь...
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 08 Августа 2003, 10:12:37
Привет всем, поковырявшись с DBI, вроде как его настроил, точно сказать не могу, нжен пример. Сложновато  с инструкциями разобраться.

Например есть директория BASE в не лежит файл teas.csv:

файл примерно такого вида:
"0240210000";"PALM Zire";"4913,10";
"0240210001";"PALM m105";"нет";
"0240210002";"PALM m125";"нет";
"0240210003";"PALM m130";"нет";
"0240210004";"PALM m500";"нет";
"0240210005";"PALM m505";"нет";
"0240210006";"PALM m515";"нет";

Начал писать макрос со следующих строк:

#!/usr/bin/perl

print("Content-type: text/html\\n\\n");

use DBI;
    $dbh = DBI->connect(DBI:CSV:f_dir=/BASE/test;csv_sep_char=\\;);
    $sth = $dbh->prepare("SELECT * FROM test");

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

   Было бы здорово еще, ежели бы был бы хотябы похожий примерчик, я бы снего содрал длч наало все что надо, все проще разбираться.
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: Chs от 08 Августа 2003, 13:32:14
perldoc DBI
Из него:

       for example:

         $sth = $dbh->prepare("SELECT foo, bar FROM table WHERE baz=?");

         $sth->execute( $baz );

         while ( @row = $sth->fetchrow_array ) {
           print "@row\\n";
         }
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 14 Августа 2003, 10:55:54
Вопрос немного из другой области, касаемо регулярных выражений:

Например есть две фразы:  
1).  Монитор  SAMSUNG 75DFX
2).  Фильтр для монитора "Русский щит"

Когда я ввожу в форму слово для поиска слово "монитор", используя следующее рег. выражение $value[$a]=~m/$_/i, то мне в качестве результата возвращается только строка 2., а 1. строка почему-то не удовлетворяет рег. выражение.

Почему, ведь i это игнорировать регист?
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: NeoNox от 14 Августа 2003, 11:13:17
А FAQ в етом разделе религия не позволяет изучать
http://wiki.webscript.ru/PFRERegister
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 14 Августа 2003, 11:41:29
А вот всеравно спаибо вам!
Изучим.
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 15 Августа 2003, 11:57:52
Здравствуйте, опятья со своими вопросами.

Есть у меня файл.shtml, внутри него всякие иклайды (верх, низ и т.д)
 
Также внутрь я пытаюсь вставить темплейт, т. е. это файл у меня и является по сути темплейтом, да вот странность какя-то темплейт выполняется, а инклайды нет.

Прочитав, узнал что есть такой модуль CGI::SSI для перла, но может быть проблемма не только в перле но и в Apache, может быть еще нужны какие-то подкрутки.
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 15 Августа 2003, 12:06:16
И вот еще модуль нашел Apache::SSI.

Не пойму почему так много модулей, и для чего кажды?

Насколько я понял разница будет только в том как эти инклайды писать, например:


   

  would be

    $ssi->include(virtual => \'some.htm\');

Правильно я понимаю?
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 27 Августа 2003, 04:57:58
Привет всем!
Попытаюсь задать вопрос еще раз, может кто ответить, осталось совсем немного и сделаю то что мне надо с вашей помощью, за что заранее БЛАГОДАРЮ.

Есть у меня файл.shtml, внутри него всякие иклайды (верх, низ и т.д), этот же файл файл у меня является темлэйтом.

Краткий пример этого файла:



Что-то



       
           
     
       
       



Установил я модуль для перла CGI::SSI, но иклайд в файле не рботает, вывод скрипта в переменные <><><> присходит нормально а вот инклуды не работают.

Как же все таки сделать так чтобы это заработала, при этом хотелось бы что бы файл был с темплэйтами и инклуды были внем, потому как тогда лучше видно структуру страницы.
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: Chs от 27 Августа 2003, 09:08:24
http://search.cpan.org/author/JAMES/CGI-SSI-0.53/SSI.pm
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 27 Августа 2003, 10:26:08
Воткнул я запись в начале скрипта

use CGI::SSI (autotie => STDOUT);
print $shtml;

, по идее теперь он должен интерпретировать инклуды в *.shtml-файлах типа таких


но сервер выдает мне ошибки

[Wed Aug 27 18:16:12 2003] [error] [client 127.0.0.1] Can\'t locate Date/Format.pm in @INC (@INC contains: C:/usr/lib C:/usr/site/lib .) at C:/usr/lib/CGI/SSI.pm line 9.

[Wed Aug 27 18:16:12 2003] [error] [client 127.0.0.1] BEGIN failed--compilation aborted at C:/usr/lib/CGI/SSI.pm line 9.

[Wed Aug 27 18:16:12 2003] [error] [client 127.0.0.1] Compilation failed in require at c:\\WWWSOF~1.RU\\CGI-BIN\\CSVREAD.PL line 2.

[Wed Aug 27 18:16:12 2003] [error] [client 127.0.0.1] BEGIN failed--compilation aborted at c:\\WWWSOF~1.RU\\CGI-BIN\\CSVREAD.PL line 2.


Почему, может я не поставл еще каких библиотек или модуль криво встал.
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: Chs от 27 Августа 2003, 22:34:16
Англицким же по бэкграунду пишут:
Цитировать

Can\'t locate Date/Format.pm

То бишь нужен Date::Format
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 28 Августа 2003, 08:43:21
Ан не выходит каменный цветок....

Нашел я библиотечку DATE::FORMAT на http://search.cpan.org, но там не как у людей (т. е. ppd и т. д.), для установки используют какие-то  make, make install, эти комманды у меня не работают, поэтому я их ручками закинул в директроию с:\\usr\\site\\lib\\DATE (туда я положил файлы Format.pm;Language.pm;Parse.pm) и в с:\\usr\\site\\lib\\Time файл Zone.pm.

Вроде ругаться перестал, т. просить ту или иную библиотеку просить перестал.

но вот директивы SSI не выполняются , пишет [an error occurred while processing this directive] .
Насколько я понял комманда типа
use CGI::SSI (autotie => STDOUT);
print $shtml;

говорит перлу чтобы тот выводил данные в стандартный выходной потоек, а он чего-то не хочет.
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: Chs от 28 Августа 2003, 09:18:01
Ну а фак почитать по поводу установки модулей религия не позволяет?
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 28 Августа 2003, 11:12:29
А это где ?
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: NeoNox от 28 Августа 2003, 11:25:01
http://wiki.webscript.ru/PFActivePerlInstallModules
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: NeoNox от 28 Августа 2003, 11:26:51
Цитировать
sun:
но вот директивы SSI не выполняются , пишет [an error occurred while processing this directive] .

Что в error_log по этому поводу записано?
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 28 Августа 2003, 11:30:24
ЧТо самое интересное в error_log пусто.

А по поводу моих не глубоких знаний Perl, я и не скрываю. Я его тока изучать начал, так тыкаюсь понемного.
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: NeoNox от 28 Августа 2003, 12:10:56
Послушай sun, а на кой тебе нужен CGI::SSI?
Я за более чем 5 лет и более десятка проектов так и ни разу не сталкнулся с необходимостью его использования. Может тебе в сторону template обработчиков посмотреть? Давай, выкладывай свою задачу.
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 01 Сентября 2003, 03:14:35
С чего начать?

1. Из всего вышесказанного в этом топике, DBI::CSV, MySQL и т.д. я понял что, пока для меня это сложнова-то, т. к. задача-то вобщем простая и довольно не сложная. Поэтому нашел макросы котрые обрабатывают CSV файлы, простыми средствами Perl, к тому же в этих макросах, я худо бедно что-то понять могу.

2. Поэтому на сайте http://ezscripting.co.uk/   я скачал, пару скриптов CSVread (выводит содержимое текстовой базы, сортирует, выводит по определенному признаку) и CSVsearch (ищет по текстовой базе).
   Незнаю насколько это будет отражаться на быстродействии, но попробовав локально, мне показалось что для 2500 позиций, этого будет вполне достаточно. Я как-то раньше пробовал, работать с нашей базой (база под управлением SQL Pervasive/Btrieve ) через ODBC-драйвер, но это было куда медленней чем работа с текстовой базой, да и безопасней!

3. Вроде все подкрутил, да только в этих примерах вывод осуществялется в файлы с темплейтами. В качестве темплейта, я хотел взять, уже существующий макет страницы (*.shtml), вставив внутрь template  ...  /template. Но вот возникла проблемма о которой я писал раннее. Темплейт обрабатывается, а инклайды нет.
Название: Отцы, как организовать поиск в текстовой базе.
Отправлено: sun от 08 Ноября 2003, 08:26:53
Вопрос к NeoNox.

Извиняюсь, за то что замолчал, был в отпуске, потом приболел, потом база на фирме завалилась, короче чуть не поседел. Теперь вот решил вновь вернуться к изучению Perl.

Так вот в продолжении ранее обсуждаемого, о том что директивы SSI не работают в файлах с темплейтами, я решил действительно, что проще не использовать модуль CGI::SSI, а воспользоваться темже темплейтом.

Допустим у  меня есть основная страница



Что-то



         
   

<>


       





Вопрос как вывести содержимое файла в котором находиться дизайн шапки (у меня называется top11.htm, и представляет обычный htm).

Я было начал  рисовать, что-то но понял что не монимаю ни фига:

НАПРИМЕР Я СЧИТАЛ СОДЕРЖИМОЕ ФАЙЛА В МАССИВ, А КАК ЭТО ВСЕ ЗАСТАВИТЬ ВЫВОДИТСЯ  В  <>?
$top="../top111.htm";

open (FILE, "$top");
@linest = ;
close(FILE);