Имеются айди собранных вчера объявлений и собранных сегодня.

smartwisard

Client
Регистрация
17.01.2017
Сообщения
824
Благодарностей
83
Баллы
28
Как уменьшить множество собранных сегодня айди, отняв пересечение со множеством собранных вчера айди?

Ясно дело, ответов на этот вопрос много, но я специально задаю неконкретный вопрос в надежде получить самый простой ответ.
Или буду благодарен за ссылку на подходящую тему.
 

Err0r

Client
Регистрация
17.05.2015
Сообщения
157
Благодарностей
110
Баллы
43
  • Спасибо
Реакции: backoff

smartwisard

Client
Регистрация
17.01.2017
Сообщения
824
Благодарностей
83
Баллы
28
Ок.
Как из списка, собранного сегодня, удалить то, что уже было собрано вчера?
 

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Удаление дублей не поможет?
 
  • Спасибо
Реакции: smartwisard

boltua

Client
Регистрация
18.10.2017
Сообщения
28
Благодарностей
6
Баллы
3
прописывай папки директории по дате
сегодня n дата соотвественно и папка другая
 
  • Спасибо
Реакции: smartwisard

smartwisard

Client
Регистрация
17.01.2017
Сообщения
824
Благодарностей
83
Баллы
28
Главное — нашёл инструменты — и список вычесть, и удалить дубли в таблице, и др.
Теперь могу разбираться, теперь не советы помогут, а работа и вникание.

Удаление дублей не поможет?
Самое то, если можно строки таблицы удалять по дублям в одном столбце.
Как обнаружил, удобнее, безошибочнее удалять по двум совпавшим параметрам, например и время и айди.
Но я так не умею и у меня дубли в таблице плохо удаляются (например человек изменил объявление), потому проще по быстрому вот так
и делать другое.

прописывай папки директории по дате
сегодня n дата соотвественно и папка другая
Да, отличный способ создать два списка, чтобы потом вычесть.



А вот ещё столбец в список
Код:
var list = project.Lists["List"];
var table = project.Tables["Table"];
lock(SyncObjects.TableSyncer)
{
    for(int i= 0; i < table.RowCount; i++)
    {
        list.Add(table.GetCell("AQ", i)); //Вместо "AQ" нужную колонку таблицы
    }
}
 
Последнее редактирование:

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113

smartwisard

Client
Регистрация
17.01.2017
Сообщения
824
Благодарностей
83
Баллы
28
Если коротко — одинаковыми строки можно считать, если совпадает не один столбец, а два.
Если по одному столбцу сличать и удалять, будут неточности. Целиком строки сравниваются плохо, так как за день произошли изменения.
Мне очень много даёт просто сортировка в OpenOffice по столбцу.

Eсли кто код мне напишет, Таблица называется Table, списки(столбцы) называются List1; List2, т.к. я всё равно его не читаю пока.
 
Последнее редактирование:

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 763
Благодарностей
1 391
Баллы
113
А разве стандартный кубик ZP по работе с таблицами не умеет удалять дубли по совпадению нескольких столбцов? Мне кажется там есть такое ....
P.S ZP сейчас под рукой нет, поэтому посмотреть не могу ...
 
  • Спасибо
Реакции: smartwisard

smartwisard

Client
Регистрация
17.01.2017
Сообщения
824
Благодарностей
83
Баллы
28
А разве стандартный кубик ZP по работе с таблицами не умеет удалять дубли по совпадению нескольких столбцов?
А может и не умеет.
Mожет есть сортировка таблицы по двум столбцам в Open Office/Excel, но не удаление дублей строки по двум столбцам в зенке.
Я не знаю, я много чего не знаю.
 
Последнее редактирование:

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 763
Благодарностей
1 391
Баллы
113
Ну если нет такого в стандартном кубике, то можно так сделать

Код:
var t = project.Tables["result"];
List<string> lst = new List<string>();
lock(SyncObjects.TableSyncer){
    for(int i=t.RowCount-1; i>=0; i--){
        var s = t.GetCell("A", i)+t.GetCell("B", i);
        if (lst.Contains(s))
        t.DeleteRow(i);
        else
        lst.Add(s);
    }
}
Такой код удалит дубли по 2м столбцам (в данном примере A и B)
 
  • Спасибо
Реакции: smartwisard

one

Client
Регистрация
22.09.2015
Сообщения
6 833
Благодарностей
1 275
Баллы
113
Есть там все.

upload_2018-12-9_17-39-56.png
 

smartwisard

Client
Регистрация
17.01.2017
Сообщения
824
Благодарностей
83
Баллы
28
Дубли таблицы кубиком удалял, вписав один столбец. Что, можно вписать два столбца, AY и H?
Не знаю, как вписать несколько столбцов! Через запятую?

Более интересен код.
Такой код удалит дубли по 2м столбцам (в данном примере A и B)
У меня по нему только один вопрос.
Таблица называется result?
 
Последнее редактирование:

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 763
Благодарностей
1 391
Баллы
113
Да, таблица result.

Дублями считаются строки где столбцы A и B совпадают (совпадение остальных столбцов не проверяется).

То есть
11 22 33
11 22 44
это дубли с точки зрения вышеприведенного кода .. будет оставлена только одна такая строка
 
  • Спасибо
Реакции: smartwisard

smartwisard

Client
Регистрация
17.01.2017
Сообщения
824
Благодарностей
83
Баллы
28
Само собой, код отлично работает! (Но только который выше, который Ваш.) Теперь вникаю в Ваш код.
Самое любопытное — что у вас делает, для чего List<string> lst = new List<string>();
Ваш сниппет сложнее и интереснее, чем сниппет столбец AQ в список List, который пригодится перед вычитанием списков, вот он
Код:
var list = project.Lists["List"];

var table = project.Tables["Table"];
lock(SyncObjects.TableSyncer)
{
    for(int i= 0; i < table.RowCount; i++)
    {
        list.Add(table.GetCell("AQ", i));      //Вместо "AQ" нужную колонку таблицы
    }
}
Я всегда таблицу называю Table, легче понимать (учусь понимать код).

Переназвал у Вас переменную t английским словом table(таблица); переменную s переназвал cells (ячейки) и получилось вот так
Ничего не испортил? (Исправлено, но я бы не брал мой код, а брал бы WebBot's one)

Changed WebBot's post:
Код:
var table = project.Tables["Table"];         //Вместо "Table" нужную таблицy
List<string> lst = new List<string>();
lock(SyncObjects.TableSyncer){
    for(int i=table.RowCount-1; i>=0; i--){
        var cells = table.GetCell("A", i)+table.GetCell("B", i);
        if (lst.Contains(cells))
        table.DeleteRow(i);
        else
        lst.Add(cells);
    }
}
Hаписанное никак не могу дочитать до конца. Не всё понимаю в строчке GetCell. Стараюсь вникнуть.
1st не смог переназвать. Знаний у меня маловато.


Любопытства ради чего будет, если из кода убрать замок lock(SyncObjects.TableSyncer), он есть и в первом, и во втором сниппетах.
Ведь, думаю, всё равно работать будет.

То, что строки Вы перечисляете с конца до начала, а в первом сниппете с начала до конца, несущественно. Это понятно.
(int i= 0; i < table.RowCount; i++)
(int i=table.RowCount-1; i>=0; i--)
А чего там два минусика и два плюсика, непонятно, но видимо надо запомнить.
 
Последнее редактирование:

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 763
Благодарностей
1 391
Баллы
113
от того как переназвать переменные суть не меняется
если лок убрать, то в мнгопотоке возможны глюки
то что строки перебираются с конца - существенно в данном случае
в результате переименований в одном месте переименовать забыли (выше SergSh уже заметил)
 

smartwisard

Client
Регистрация
17.01.2017
Сообщения
824
Благодарностей
83
Баллы
28
что строки перебираются с конца - существенно в данном случае
Это любопытно.
Самое любопытное — что у вас делает List<string> lst = new List<string>(); для чего это ?
Что можно класть в string? Впрочем, у меня даже вопросы неумелые.
 
Последнее редактирование:

SergSh

Client
Регистрация
10.05.2017
Сообщения
541
Благодарностей
395
Баллы
63
Это любопытно.
Самое любопытное — что у вас делает List<string> lst = new List<string>(); для чего это ?
Что можно класть в string? Впрочем, у меня даже вопросы неумелые.
List<string> lst = new List<string>(); - это список, временный буфер для строк из таблици.
Цикл берет новую строку из таблици
var cells = table.GetCell("A", i)+table.GetCell("B", i);
и проверяет список lst функцией lst.Contains(cells) на наличие этой строки в списке
если есть вхождение, то это дубль и удаляет эту строку из таблици функцией table.DeleteRow(i);
в ином случае добавляет эту строку в буферный список lst.Add(cells);
 
  • Спасибо
Реакции: WebBot и smartwisard

Кто просматривает тему: (Всего: 3, Пользователи: 0, Гости: 3)