|
| Дата |
|
USD/RUB | 93.4409 | BTC/USD | 63346.0000 |
|
|
|
Скрипты, программы и технические решения Обсуждаем скрипты, программы и новые технологии. |
17.04.2013, 13:45
|
#1
|
Senior Member
Регистрация: 30.06.2007
Сообщений: 107
Бабло: $44000
|
Чем сделать выборку из базы?
Есть файл baza.txt ~10млн строк. Есть файл keys.txt с несколькими сотнями ключевиков построчно, по которым нужно последовательно по одному сделать выборку из baza.txt и записать в соответствующие файлы на выходе: key1.txt, key2.txt ... и тд.
|
|
|
17.04.2013, 14:43
|
#2
|
Senior Member
Регистрация: 14.04.2013
Сообщений: 131
Бабло: $28815
|
попробуй так.
PHP код:
<?php
set_time_limit(0);
$f1 = fopen("baza.txt", "r");
$f2 = fopen("keys.txt", "r");
while (!feof($f2)) {
$key = trim(fgets($f2));
while (!feof($f1)) {
$w = trim(fgets($f1));
if(stripos($w,$key)){
file_put_contents ($key.'txt', $w.PHP_EOL, FILE_APPEND | LOCK_EX);
}
}
}
fclose($f1);
fclose($f2);
echo 'done';
|
|
|
17.04.2013, 15:11
|
#3
|
Читатель
Регистрация: 23.11.2007
Сообщений: 420
Бабло: $48745
|
Цитата:
PHP код:
... if(stripos($w,$key)){ ...
|
PHP код:
if(stripos($w,$key) !== false){
|
|
|
17.04.2013, 15:23
|
#4
|
Senior Member
Регистрация: 30.06.2007
Сообщений: 107
Бабло: $44000
ТС -->
|
ТС
Благодарю! Правда, денвер у меня не установлен... Скрипт справится с 300МБ файлом?
Из десктопных прог побовал TextPipe, но так и не нашел как там делать вывод во множество файлов.
|
|
|
17.04.2013, 15:33
|
#5
|
Senior Member
Регистрация: 14.04.2013
Сообщений: 131
Бабло: $28815
|
Цитата:
Сообщение от Weil
Благодарю! Правда, денвер у меня не установлен... Скрипт справится с 300МБ файлом?
Из десктопных прог побовал TextPipe, но так и не нашел как там делать вывод во множество файлов.
|
справится. тут построчное чтение.
вместо денвера попробуй http://open-server.ru/download.html
|
|
|
17.04.2013, 20:11
|
#6
|
Senior Member
Регистрация: 11.02.2010
Сообщений: 928
Бабло: $176835
|
python
PHP код:
if __name__ == '__main__': with open('baza.txt', encoding='utf-8') as fbl: bls = set(fbl) with open('keys.txt', encoding='utf-8') as fw: ws = set(w.strip() for w in fw) for word in ws: tup = tuple(s for s in bls if word in s) if tup: with open(word + '.txt', "w", encoding='utf-8') as fres: print(*tup, sep='', end='', file=fres) print("ok")
|
|
|
17.04.2013, 23:39
|
#7
|
автоматизирую интернеты
Регистрация: 05.07.2009
Адрес: chesser.ru
Сообщений: 3,362
Бабло: $470735
|
for i in `cat keys.txt`; do grep $i baza.txt > $i.txt; done
Последний раз редактировалось chesser; 17.04.2013 в 23:45.
|
|
|
17.04.2013, 23:47
|
#8
|
Senior Member
Регистрация: 05.01.2008
Сообщений: 1,676
Бабло: $213930
|
chesser, самый умный, да?
|
|
|
18.04.2013, 00:46
|
#9
|
Senior Member
Регистрация: 18.08.2007
Сообщений: 1,098
Бабло: $199375
|
Цитата:
Сообщение от inkubus
python
PHP код:
if __name__ == '__main__':
with open('baza.txt', encoding='utf-8') as fbl:
bls = set(fbl)
with open('keys.txt', encoding='utf-8') as fw:
ws = set(w.strip() for w in fw)
for word in ws:
tup = tuple(s for s in bls if word in s)
if tup:
with open(word + '.txt', "w", encoding='utf-8') as fres:
print(*tup, sep='', end='', file=fres)
print("ok")
|
феерический пиздос, сильный быдлокод
|
|
|
18.04.2013, 21:04
|
#10
|
Senior Member
Регистрация: 30.06.2007
Сообщений: 107
Бабло: $44000
ТС -->
|
ТС
PHP код:
<?php
set_time_limit(0);
$f1 = fopen("baza.txt", "r");
$f2 = fopen("keys.txt", "r");
while (!feof($f2)) {
$key = trim(fgets($f2));
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';
?>
Не работает Делает выборку только по первому кею из keys.txt, называет файл key1txt вместо key1.txt и пишет done.
|
|
|
|