[identity profile] strange-way.livejournal.com posting in [community profile] useful_faq
Доброй ночи.

Есть три списка слов. 5000, 7000 и 1800.
Нужно сравнить первые два и общие члены списков сравнить с третьим, вычтя его.
Как это можно сделать стандартными средствами без программирования?
Экселем там или Акцессом?
Может еще как-то...


Подскажите, а?...

Date: 2006-12-07 10:06 pm (UTC)
From: [identity profile] langsamer.livejournal.com
Скажите, а что вы понимаете под действиями с Access, которые не являются программированием? А то я вот уже добрых лет 6 в том числе и работой с Access на жизнь зарабатываю, а вот "непрограммирования" там не знаю...
Запрос по образцу?

Date: 2006-12-07 10:28 pm (UTC)
From: [identity profile] langsamer.livejournal.com
Ну тогда так, на скорую руку: в аксессе создаете три таблицы myTable1, myTable2, myTable3, в каждом по одному столбцу myCol. В каждую из таблиц вставляете соответсвующий список, в том порядке, как они у вас перечислены. После чего создаете запрос, переключаетесь в SQL-вид и вставляете туда следующий код:

select t1.myCol from myTable1 as t1
where t1.myCol in (select t2.myCol from myTable2 as t2)
and t1.myCol not in (select t3.myCol from myTable3 as t3)


Выполняете запрос. Он выдаст вам все элементы первого списка, которые встречаются во втором, но не встречаются в третьем. Запрос не оптимальный, но сработает, а большего вам и не нужно :)

Date: 2006-12-07 10:10 pm (UTC)
From: [identity profile] spamsink.livejournal.com
Стандартными средствами Unix (или Cygwin) - с легкостью. Есть утилита comm, которая сравнивает упорядоченные списки и выдает на выбор любую комбинацию из "только в первом списке", "только во втором списке" и "в обоих списках". Так что за два шага получится желаемый результат.

Date: 2006-12-07 10:11 pm (UTC)
From: [identity profile] langsamer.livejournal.com
Ага, инсталляция Цигвина для человека, не желающего иметь ничего общего с программированием - то еще развлечение ;)

Date: 2006-12-07 10:16 pm (UTC)
From: [identity profile] spamsink.livejournal.com
Можно и без цыгвина:

http://unxutils.sourceforge.net/

Date: 2006-12-07 10:33 pm (UTC)
From: [identity profile] spamsink.livejournal.com
Построчное, и файлы должны быть предварительно отсортированы.

Date: 2006-12-07 11:17 pm (UTC)
From: [identity profile] spamsink.livejournal.com
Просто по алфавиту.

Date: 2006-12-07 10:19 pm (UTC)
From: [identity profile] spamsink.livejournal.com
Упомянутые два шага:

comm -12 файл1 файл2 > tmpfile
comm -23 tmpfile файл3 > result

или, без промежуточного файла:

comm -12 файл1 файл2 | comm -23 - файл3 > result