|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Разное - Помогите решить на чём писать. |
|
|
Разное - Помогите решить на чём писать.
|
Пользователь Сообщения: 58 |
Профиль | Отправить PM | Цитировать И так у меня есть задачя:
- у нас есть два файла, в формате txt и каждый размеров 15 гиг. В них в столбик идут пароли, около 1,5 миллиарда в каждом. Задача: нужно проанализировать эти файлы на наличие одинаковых строчек (то есть построчное чтение из двух фалов по 1 строке и каждого за 1 такт) и если строки разные то записать из оби в файл out.txt а если одинаковые то удалить одну из них а вторую записать в тотже файл. Знания языков программирования по шкале от 0 до 3 (где 0 - это ничего, а 3 - пишу программы, средние): - pascal (1) - С++ (1) - .bat (2) Я хочю совет: на каком языке мне лучше это писать, и какой учить.??? |
|
Отправлено: 15:18, 20-04-2014 |
Пользователь Сообщения: 61
|
Профиль | Отправить PM | Цитировать Это будет очень долго с файлами
Цитата Eugene Shugaev:
|
|
Отправлено: 15:43, 20-04-2014 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 58
|
Профиль | Отправить PM | Цитировать Да спасибо)) Дельна прога, только в коментариях написано что она с трудом базы на 300 мб кушает, а тут на 30 гб((((
|
Отправлено: 15:54, 20-04-2014 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Eugene Shugaev, выложите образцы исходных файлов (небольшого размера, в той же кодировке, что и оригинальные) и результирующего.
|
Отправлено: 18:17, 20-04-2014 | #4 |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать имхо комбинация 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 справится на ура
|
|
Отправлено: 21:20, 22-04-2014 | #5 |
Новый участник Сообщения: 7
|
Профиль | Отправить PM | Цитировать Конечно слегка оффтоп, но еслиб передо мной стояла такая задача, я бы ударил по ней всей мощью 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"; } } |
Последний раз редактировалось Varox, 19-06-2014 в 15:14. Отправлено: 14:35, 19-06-2014 | #6 |
Новый участник Сообщения: 35
|
Профиль | Отправить PM | Цитировать Не совсем понятно, тебе нужно сравнить строчки в принципе (т.е. 1 строка 1 файла = 1 строке 2 файла и тд.) или надо сравнить так (1 строка 1 файла = любой строке 2 файла)?
Ну я не очень силен в разработке, но приходилось большие файлы обрабатывать и сравнивать, правда не такие большие (до 4 ГБ). Если вариант 1 нужен то по барабану вообще, главное читать построчно. Если вариант 2, то главное не pascal, я бы например использовал какой-нибудь dictionary и туда загрузил все из первого а потом второй построчно проверял, механизм поиска в словаре довольно быстро работает. |
Отправлено: 15:27, 01-07-2014 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата navuhodonosor:
Цитата Eugene Shugaev:
|
||
Отправлено: 02:30, 02-07-2014 | #8 |
Новый участник Сообщения: 35
|
Профиль | Отправить PM | Цитировать Согласен, БД для этого и нужны. Но иногда задачи ставятся так, что БД применить нельзя, мне приходилось писать макросы на VBA, как раз потому, что Excel не позволял импортировать файлы, слишком много значений, больше 1048576. Как раз тут меня и выручили словари, делал их несколько, в каждом было порядка миллиона ключей, поиск по словарю очень порадовал))) в итоге вся обработка средствами VBA занимала около 5 минут.
По поводу миллиардов строк данных, конечно не пробовал, не знаю способен ли словарь поместить такое и какой нужен для этого объем ОЗУ. |
Отправлено: 09:52, 02-07-2014 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата navuhodonosor:
Цитата Iska:
Цитата navuhodonosor:
|
|||
Отправлено: 10:17, 02-07-2014 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
C/C++ - Помогите решить задачу на Си | friter | Программирование и базы данных | 16 | 21-01-2019 19:17 | |
C/C++ - [решено] Помогите,пожалуйста,решить на С++ | hmik | Программирование и базы данных | 2 | 30-10-2011 11:04 | |
C/C++ - ПОМОГИТЕ РЕШИТЬ ЗАДАЧУ НА С++ | delfi | Программирование и базы данных | 1 | 12-05-2011 20:19 | |
Разное - помогите решить задачи на QBasic | rockman90 | Программирование и базы данных | 1 | 28-12-2007 18:34 | |
Помогите научится писать программы на C++Builder 6.0 | maksimka ford | Программирование и базы данных | 10 | 25-11-2003 19:43 |
|