Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Помогите решить на чём писать. (http://forum.oszone.net/showthread.php?t=281173)

Eugene Shugaev 20-04-2014 15:18 2340882

Помогите решить на чём писать.
 
И так у меня есть задачя:
- у нас есть два файла, в формате txt и каждый размеров 15 гиг. В них в столбик идут пароли, около 1,5 миллиарда в каждом. Задача: нужно проанализировать эти файлы на наличие одинаковых строчек (то есть построчное чтение из двух фалов по 1 строке и каждого за 1 такт) и если строки разные то записать из оби в файл out.txt а если одинаковые то удалить одну из них а вторую записать в тотже файл.
Знания языков программирования по шкале от 0 до 3 (где 0 - это ничего, а 3 - пишу программы, средние):
- pascal (1)
- С++ (1)
- .bat (2)
Я хочю совет: на каком языке мне лучше это писать, и какой учить.???

VitProff 20-04-2014 15:43 2340885

Это будет очень долго с файлами
Цитата:

Цитата Eugene Shugaev
каждый размеров 15 гиг. »

На Delphi есть готовые программы с таким функционалом, например "workwithtext by alex ey" (Эта программа работает з базами паролей для брута, ссылку не даю так как не знаю запрещено ли здесь давать ссылки на хак-программы)

Eugene Shugaev 20-04-2014 15:54 2340886

Да спасибо)) Дельна прога, только в коментариях написано что она с трудом базы на 300 мб кушает, а тут на 30 гб((((

Iska 20-04-2014 18:17 2340925

Eugene Shugaev, выложите образцы исходных файлов (небольшого размера, в той же кодировке, что и оригинальные) и результирующего.

pva 22-04-2014 21:20 2341702

имхо комбинация sort http://www.opennet.ru/man.shtml?topi...A%C1%D4%D8+man и uniq http://www.opennet.ru/man.shtml?topi...ry=1&russian=0 справится на ура

Varox 19-06-2014 14:35 2366149

Конечно слегка оффтоп, но еслиб передо мной стояла такая задача, я бы ударил по ней всей мощью perl. Ну или да на bash как господин pva предлагает, тем более что в bashe инструментов предостаточно для таких вот задач. А С++ или Pascal для такой фигни не стал бы использовать, если конечно не нужно эту задачу решать часто и быстро.

Вот покурил минут 5 вот такой код:
Код:

#find_eq.pl

my $fn1 = "file1_15gb.txt"; #имя первого файла
my $fn2 = "file2_15gb.txt"; #имя второго файла
my $outfile = "out.txt"; #имя выходного файла

open FILE1,"$fn1" or die; #открываем файлы на чтение
open FILE2,"$fn2" or die; 
open OUT,">$outfile" or die; #открываем выходной файл на запись

while (not eof) {  #выполняем пока не конец одного из фалов
 $str1 = <FILE1>; # читайем строчки  их фалов в переменные str1 и str2
 $str2 = <FILE2>;
 chomp($str1); # убираем символы конца строки
 chomp($str2);

 #если строки не совпадают то пишем на выход
 #с указанием из какого файла все прочитано
 if (not($str1 eq $str2)){
  print OUT "$fn1 - $str1\n";
  print OUT "$fn2 - $str2\n";
 }
}

мощи Perl конечно в коде немного, и на файлах он 15 гиговых не проверялся, но думается мне работать будет, но долго, зато написано за 5 минут.:)

navuhodonosor 01-07-2014 15:27 2370701

Не совсем понятно, тебе нужно сравнить строчки в принципе (т.е. 1 строка 1 файла = 1 строке 2 файла и тд.) или надо сравнить так (1 строка 1 файла = любой строке 2 файла)?
Ну я не очень силен в разработке, но приходилось большие файлы обрабатывать и сравнивать, правда не такие большие (до 4 ГБ).
Если вариант 1 нужен то по барабану вообще, главное читать построчно.
Если вариант 2, то главное не pascal, я бы например использовал какой-нибудь dictionary и туда загрузил все из первого а потом второй построчно проверял, механизм поиска в словаре довольно быстро работает.

Iska 02-07-2014 02:30 2370913

Цитата:

Цитата navuhodonosor
Если вариант 2, то главное не pascal, я бы например использовал какой-нибудь dictionary и туда загрузил все из первого а потом второй построчно проверял, механизм поиска в словаре довольно быстро работает. »

navuhodonosor, с такими объёмами:
Цитата:

Цитата Eugene Shugaev
и каждый размеров 15 гиг. »

— никаких словарей. Только базы данных и запросы.

navuhodonosor 02-07-2014 09:52 2370979

Согласен, БД для этого и нужны. Но иногда задачи ставятся так, что БД применить нельзя, мне приходилось писать макросы на VBA, как раз потому, что Excel не позволял импортировать файлы, слишком много значений, больше 1048576. Как раз тут меня и выручили словари, делал их несколько, в каждом было порядка миллиона ключей, поиск по словарю очень порадовал))) в итоге вся обработка средствами VBA занимала около 5 минут.
По поводу миллиардов строк данных, конечно не пробовал, не знаю способен ли словарь поместить такое и какой нужен для этого объем ОЗУ.

Iska 02-07-2014 10:17 2370990

Цитата:

Цитата navuhodonosor
Но иногда задачи ставятся так, что БД применить нельзя, »

Я потому и пытался добиться от автора образцов текстовых файлов:
Цитата:

Цитата Iska
Eugene Shugaev, выложите образцы исходных файлов (небольшого размера, в той же кодировке, что и оригинальные) и результирующего. »

дабы оценить возможность применения OLE DB Text Driver или Log Parser.

Цитата:

Цитата navuhodonosor
По поводу миллиардов строк данных, конечно не пробовал, не знаю способен ли словарь поместить такое и какой нужен для этого объем ОЗУ. »

Очень условно можно считать по количеству символов. То есть, если принять, что мы используем x64-разрядную ОС, соответствующий инструментарий — мы в любом случае ограничены сверху объёмом свободной памяти. Всё, что больше — пойдёт вытесняться в виртуальную память с соответствующим диким «проседанием» производительности. Посему — БД. Даже если надо будет предварительно создать эту БД и конвертировать текстовые файлы в её таблицы.

User001 02-07-2014 14:23 2371093

Цитата:

Цитата Iska
Я потому и пытался добиться от автора образцов текстовых файлов »

Может, уже кто-нибудь сгенерит такие файлы, да попробуем все способы? :)


Время: 20:40.

Время: 20:40.
© OSzone.net 2001-