|
| Дата |
|
USD/RUB | 88.4375 | BTC/USD | 67560.1678 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
17.04.2013, 13:45
|
Start Post: Чем сделать выборку из базы?
|
Senior Member
Регистрация: 30.06.2007
Сообщений: 107
Бабло: $44030
|
Есть файл baza.txt ~10млн строк. Есть файл keys.txt с несколькими сотнями ключевиков построчно, по которым нужно последовательно по одному сделать выборку из baza.txt и записать в соответствующие файлы на выходе: key1.txt, key2.txt ... и тд.
|
|
|
18.04.2013, 21:50
|
#12
|
Senior Member
Регистрация: 14.04.2013
Сообщений: 130
Бабло: $28815
|
Цитата:
Сообщение от Weil
Не работает Делает выборку только по первому кею из keys.txt, называет файл key1txt вместо key1.txt и пишет done.
|
вроде поправил
PHP код:
<?php
set_time_limit(0);
$f1 = fopen("baza.txt", "r");
$f2 = fopen("keys.txt", "r");
while (!feof($f2)) {
$key = trim(fgets($f2));
fseek($f1,0);
while (!feof($f1)) {
$w = trim(fgets($f1));
if(stripos($w,$key) !== false){
file_put_contents ($key.'.txt', $w.PHP_EOL, FILE_APPEND | LOCK_EX);
}
}
}
fclose($f1);
fclose($f2);
echo 'done';
?>
|
|
|
18.04.2013, 23:02
|
#13
|
Senior Member
Регистрация: 30.06.2007
Сообщений: 107
Бабло: $44030
ТС -->
|
ТС
Работает вроде Большое спасибо!
Можешь добавить 2 фичи?
1. Имя файла из нескольких слов выводится через дефис, например: buy-honda-car.txt
2. Если ничего не нашлось по определенному ключевику, создается просто пустой файл с его именем.
|
|
|
18.04.2013, 23:36
|
#14
|
Senior Member
Регистрация: 14.04.2013
Сообщений: 130
Бабло: $28815
|
PHP код:
<?php
set_time_limit(0);
$f1 = fopen("baza.txt", "r");
$f2 = fopen("keys.txt", "r");
while (!feof($f2)) {
$key = trim(fgets($f2));
file_put_contents (str_replace(' ','-',$key).'.txt', '', FILE_APPEND | LOCK_EX);
fseek($f1,0);
while (!feof($f1)) {
$w = trim(fgets($f1));
if(stripos($w,$key) !== false){
file_put_contents (str_replace(' ','-',$key).'.txt', $w.PHP_EOL, FILE_APPEND | LOCK_EX);
}
}
}
fclose($f1);
fclose($f2);
echo 'done';
|
|
|
19.04.2013, 09:29
|
#15
|
Senior Member
Регистрация: 30.06.2007
Сообщений: 107
Бабло: $44030
ТС -->
|
ТС
Все ОК! За 8 часов работы скрипт сделал выборки по 650 ключевикам.
|
|
|
19.04.2013, 10:18
|
#16
|
Senior Member
Регистрация: 03.11.2010
Сообщений: 284
Бабло: $65960
|
Цитата:
Сообщение от Weil
Все ОК! За 8 часов работы скрипт сделал выборки по 650 ключевикам.
|
LOL. за это время можно было воткнуть линь на виртуалку и сделать как написал чессер, и всеравно времени бы ушло гораздо меньше. делать выборки из больших баз скриптовыми языками - онанизм
|
|
|
19.04.2013, 11:09
|
#17
|
Ебланнед
Регистрация: 15.04.2013
Сообщений: 33
Бабло: $17240
|
Цитата:
Сообщение от mrzaggi
делать выборки из больших баз скриптовыми языками - онанизм
|
зачем писать хуйню?
в прямых руках на скриптовом языке это делается очень быстро и занимает очень мало
и его большой плюс в том, что он 1 раз загрузится и всё отработает
а в примере чессера нужно загружать отдельно grep каждый раз
т.е. 10 млн раз или сколько там строк
|
|
|
19.04.2013, 12:06
|
#18
|
Senior Member
Регистрация: 14.04.2013
Сообщений: 130
Бабло: $28815
|
Цитата:
Сообщение от Weil
Все ОК! За 8 часов работы скрипт сделал выборки по 650 ключевикам.
|
действительно медленно как-то.
а вот гуру php, подскажите, как можно сделать быстрее? читать из baza.txt блоками, по 1000 строк, и в них производить поиск?
я еще только начинаю учить, так что
|
|
|
19.04.2013, 12:06
|
#19
|
Senior Member
Регистрация: 16.07.2009
Сообщений: 936
Бабло: $152632
|
Проблема не в языке, а в говнокоде:
Код:
if(stripos($w,$key) !== false){
file_put_contents (str_replace(' ','-',$key).'.txt', $w.PHP_EOL, FILE_APPEND | LOCK_EX);
}
Не говоря о том, что проход по файлу-базе делается 650 раз (как и в случае с грепом, кстати).
|
|
|
19.04.2013, 12:10
|
#20
|
Senior Member
Регистрация: 14.04.2013
Сообщений: 130
Бабло: $28815
|
Цитата:
Сообщение от spamless
Проблема не в языке, а в говнокоде:
|
ну если не сложно, то как правильно делать то?
я понимаю, что можно keys.txt считать один раз в массив, и делать проход только 1 раз. будет намного быстрей. но тогда надо учитывать сколько там ключей, чтобы памяти хватило.
|
|
|
19.04.2013, 12:19
|
#21
|
Ебланнед
Регистрация: 15.04.2013
Сообщений: 33
Бабло: $17240
|
Цитата:
Сообщение от spasibo
ну если не сложно, то как правильно делать то?
я понимаю, что можно keys.txt считать один раз в массив, и делать проход только 1 раз. будет намного быстрей. но тогда надо учитывать сколько там ключей, чтобы памяти хватило.
|
в идеале тут надо хеши использовать
но это если в baza.txt можно как-то выделить именно ключ из текста
а иначе просто keys.txt читается в массив
потом построчно прогоняется baza.txt и в каждой строке ловится каждый элемент массива через регулярки
|
|
|
|