Forum Webscript.Ru
Программирование => Perl => Тема начата: sun от 18 Июля 2003, 10:56:30
-
Есть у меня файлик, который ежедневно выгружается на сервак из моей базы данных (по другому не сделаешь). Это текстовый файл. В нем около 4500 строк, размер около 400-500кб. Решил написать поиск по этому файлу (в файле прайс, с ценами, в перемешку с тегами), но думаю просто тупым перебором ничего не выйдет хорошего. Может подскажете чего, а если семпл программы на Perl, так просто совсем будет здорово.
С уважением и почтением.
-
А, что мешает сделать поиск по базе?..
-
Да вобщем много всяких, но. Первая, это то что база работате под SQL Pervasive, жуткая штука, в общем удалось победить через ODBC, но только он так долго обрабатывает запросы минута и более. Вторая причина, мне просто не дали доступа к серваку с базами , поэтому пришлось решать вопрос экспортом базы в *.тхт файлы, а в шедулере задавать каждые 3-4 часа эту выгрузку.
Спасибо за ответ.
-
DBD::CSV ?
-
Нверное я все таки "ламер", но что это такое DBD::CSV ?
-
http://search.cpan.org/author/JZUCKER/DBD-CSV-0.2002/
-
Сапасибо за ссылку, будем почитать, хотя там все по буржуйски написано.
Тут мне в голову еще один вариант пришел, у меня есть возможность выгружать, данные в *.dbf формате, в принципе этот формат насколько я знаяю MySQL поддерживает, точно не знаю. Что скажешь?
-
[off]sun ну ты, че? Ты бы еще сказал cpan.org классный сайт, но там все по буржуйски...[/off]
насколько я знаяю MySQL поддерживает, точно не знаю.
Так ты хочешь в МySQL все заливать? Есть некие конвертеры dbf2mysql.
-
Про буржуев это я зря, признаю, ведь все люди БРАТЬЯ.
Идея с MySQL мне импонирует больше, а ссылочку на конвертер, а мож примерчик реализации такого рода задачи.
Все равно спаибо.
-
Програмульку нашел уже. Пасибо.
-
Это не скрипты, а утилиты. Сам не юзал, так что ничего сказать не могу - смотри 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).
-
Я тут поэкспериментил, нашел простенький скрипт, котрый работает с CSV-файлом, меня главным образом интересовала скорость поиска. Скорость вполне, единственно, что в этом скрипте, поиск происходит только по ключевому слову, он например не может разбивать фразу, и искать и выстравиать строики по возрастанию и т. п.
Ведь наверное есть такой скрипт который работает с CSV базой, ищет в ней и результаты поиска отображает на экране и т. д.
-
sun:
он например не может разбивать фразу, и искать и выстравиать строики по возрастанию
CSV далеко не MS[y]SQL. :) Chs же тебе указал куда смотреть надо, а как напишешь это уже от тебя зависит, ты же с DBI знаком надеюсь...
-
Нет с DBI не знаком, что это такое? Насколько я понимаю это какя-то библиотека.
-
sun
Тогда лучше познакомится :-), это модуль (можно сказать и библиотека) которая как раз таки работает с базами данных...
-
DBI - Database independent interface for Perl
BDB::CSV - драйвер для работы с CSV файлами средствами SQL.
-
О каких базах идет речь: PostgreSQL, MySQL или обычные текстовые файлы? Если возможно с помощью этого модуля подключаться к текстовой базе (например в *.CSV формате), тоды конечно стоит поковырятьс. И еще какие возможности, например: поиск по текстовой базе и т. д.
-
А где бы примерчик посмотреть и документашку, что-нибудь простое. Вроде это то что надо.
-
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
Выбирай любой... :-)
-
http://search.cpan.org/author/TIMB/DBI-1.37/ (http://search.cpan.org/author/TIMB/DBI-1.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, для того что хотя бы проверить работает уменя что-то или нет, может еще какие-нибуь модули нужно установить.
Было бы здорово еще, ежели бы был бы хотябы похожий примерчик, я бы снего содрал длч наало все что надо, все проще разбираться.
-
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";
}
-
Вопрос немного из другой области, касаемо регулярных выражений:
Например есть две фразы:
1). Монитор SAMSUNG 75DFX
2). Фильтр для монитора "Русский щит"
Когда я ввожу в форму слово для поиска слово "монитор", используя следующее рег. выражение $value[$a]=~m/$_/i, то мне в качестве результата возвращается только строка 2., а 1. строка почему-то не удовлетворяет рег. выражение.
Почему, ведь i это игнорировать регист?
-
А FAQ в етом разделе религия не позволяет изучать
http://wiki.webscript.ru/PFRERegister
-
А вот всеравно спаибо вам!
Изучим.
-
Здравствуйте, опятья со своими вопросами.
Есть у меня файл.shtml, внутри него всякие иклайды (верх, низ и т.д)
Также внутрь я пытаюсь вставить темплейт, т. е. это файл у меня и является по сути темплейтом, да вот странность какя-то темплейт выполняется, а инклайды нет.
Прочитав, узнал что есть такой модуль CGI::SSI для перла, но может быть проблемма не только в перле но и в Apache, может быть еще нужны какие-то подкрутки.
-
И вот еще модуль нашел Apache::SSI.
Не пойму почему так много модулей, и для чего кажды?
Насколько я понял разница будет только в том как эти инклайды писать, например:
would be
$ssi->include(virtual => \'some.htm\');
Правильно я понимаю?
-
Привет всем!
Попытаюсь задать вопрос еще раз, может кто ответить, осталось совсем немного и сделаю то что мне надо с вашей помощью, за что заранее БЛАГОДАРЮ.
Есть у меня файл.shtml, внутри него всякие иклайды (верх, низ и т.д), этот же файл файл у меня является темлэйтом.
Краткий пример этого файла:
Что-то
<> | <> | <> |
Установил я модуль для перла CGI::SSI, но иклайд в файле не рботает, вывод скрипта в переменные <><><> присходит нормально а вот инклуды не работают.
Как же все таки сделать так чтобы это заработала, при этом хотелось бы что бы файл был с темплэйтами и инклуды были внем, потому как тогда лучше видно структуру страницы.
-
http://search.cpan.org/author/JAMES/CGI-SSI-0.53/SSI.pm
-
Воткнул я запись в начале скрипта
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.
Почему, может я не поставл еще каких библиотек или модуль криво встал.
-
Англицким же по бэкграунду пишут:
Can\'t locate Date/Format.pm
То бишь нужен Date::Format
-
Ан не выходит каменный цветок....
Нашел я библиотечку 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;
говорит перлу чтобы тот выводил данные в стандартный выходной потоек, а он чего-то не хочет.
-
Ну а фак почитать по поводу установки модулей религия не позволяет?
-
А это где ?
-
http://wiki.webscript.ru/PFActivePerlInstallModules
-
sun:
но вот директивы SSI не выполняются , пишет [an error occurred while processing this directive] .
Что в error_log по этому поводу записано?
-
ЧТо самое интересное в error_log пусто.
А по поводу моих не глубоких знаний Perl, я и не скрываю. Я его тока изучать начал, так тыкаюсь понемного.
-
Послушай sun, а на кой тебе нужен CGI::SSI?
Я за более чем 5 лет и более десятка проектов так и ни разу не сталкнулся с необходимостью его использования. Может тебе в сторону template обработчиков посмотреть? Давай, выкладывай свою задачу.
-
С чего начать?
1. Из всего вышесказанного в этом топике, DBI::CSV, MySQL и т.д. я понял что, пока для меня это сложнова-то, т. к. задача-то вобщем простая и довольно не сложная. Поэтому нашел макросы котрые обрабатывают CSV файлы, простыми средствами Perl, к тому же в этих макросах, я худо бедно что-то понять могу.
2. Поэтому на сайте http://ezscripting.co.uk/ я скачал, пару скриптов CSVread (выводит содержимое текстовой базы, сортирует, выводит по определенному признаку) и CSVsearch (ищет по текстовой базе).
Незнаю насколько это будет отражаться на быстродействии, но попробовав локально, мне показалось что для 2500 позиций, этого будет вполне достаточно. Я как-то раньше пробовал, работать с нашей базой (база под управлением SQL Pervasive/Btrieve ) через ODBC-драйвер, но это было куда медленней чем работа с текстовой базой, да и безопасней!
3. Вроде все подкрутил, да только в этих примерах вывод осуществялется в файлы с темплейтами. В качестве темплейта, я хотел взять, уже существующий макет страницы (*.shtml), вставив внутрь template ... /template. Но вот возникла проблемма о которой я писал раннее. Темплейт обрабатывается, а инклайды нет.
-
Вопрос к NeoNox.
Извиняюсь, за то что замолчал, был в отпуске, потом приболел, потом база на фирме завалилась, короче чуть не поседел. Теперь вот решил вновь вернуться к изучению Perl.
Так вот в продолжении ранее обсуждаемого, о том что директивы SSI не работают в файлах с темплейтами, я решил действительно, что проще не использовать модуль CGI::SSI, а воспользоваться темже темплейтом.
Допустим у меня есть основная страница
Что-то
Вопрос как вывести содержимое файла в котором находиться дизайн шапки (у меня называется top11.htm, и представляет обычный htm).
Я было начал рисовать, что-то но понял что не монимаю ни фига:
НАПРИМЕР Я СЧИТАЛ СОДЕРЖИМОЕ ФАЙЛА В МАССИВ, А КАК ЭТО ВСЕ ЗАСТАВИТЬ ВЫВОДИТСЯ В <>?
$top="../top111.htm";
open (FILE, "$top");
@linest = ;
close(FILE);