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

  • Автор темы Автор темы smartwisard
  • Дата начала Дата начала

smartwisard

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

Ясно дело, ответов на этот вопрос много, но я специально задаю неконкретный вопрос в надежде получить самый простой ответ.
Или буду благодарен за ссылку на подходящую тему.
 
Как уменьшить множество собранных сегодня айди, отняв пересечение со множеством собранных вчера айди?
UOv9lDQ.jpg
 
  • Оценить
Реакции: backoff
Ок.
Как из списка, собранного сегодня, удалить то, что уже было собрано вчера?
 
Удаление дублей не поможет?
 
  • Оценить
Реакции: smartwisard
прописывай папки директории по дате
сегодня n дата соотвественно и папка другая
 
  • Оценить
Реакции: smartwisard
Главное — нашёл инструменты — и список вычесть, и удалить дубли в таблице, и др.
Теперь могу разбираться, теперь не советы помогут, а работа и вникание.

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

прописывай папки директории по дате
сегодня 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" нужную колонку таблицы
    }
}
 
Последнее редактирование:
Если коротко — одинаковыми строки можно считать, если совпадает не один столбец, а два.
Если по одному столбцу сличать и удалять, будут неточности. Целиком строки сравниваются плохо, так как за день произошли изменения.
Мне очень много даёт просто сортировка в OpenOffice по столбцу.

Eсли кто код мне напишет, Таблица называется Table, списки(столбцы) называются List1; List2, т.к. я всё равно его не читаю пока.
 
Последнее редактирование:
А разве стандартный кубик ZP по работе с таблицами не умеет удалять дубли по совпадению нескольких столбцов? Мне кажется там есть такое ....
P.S ZP сейчас под рукой нет, поэтому посмотреть не могу ...
 
  • Оценить
Реакции: smartwisard
А разве стандартный кубик ZP по работе с таблицами не умеет удалять дубли по совпадению нескольких столбцов?
А может и не умеет.
Mожет есть сортировка таблицы по двум столбцам в Open Office/Excel, но не удаление дублей строки по двум столбцам в зенке.
Я не знаю, я много чего не знаю.
 
Последнее редактирование:
Ну если нет такого в стандартном кубике, то можно так сделать

Код:
Развернуть Свернуть Копировать
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
Есть там все.

upload_2018-12-9_17-39-56.png
 
Дубли таблицы кубиком удалял, вписав один столбец. Что, можно вписать два столбца, AY и H?
Не знаю, как вписать несколько столбцов! Через запятую?

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

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

То есть
11 22 33
11 22 44
это дубли с точки зрения вышеприведенного кода .. будет оставлена только одна такая строка
 
  • Оценить
Реакции: smartwisard
Само собой, код отлично работает! (Но только который выше, который Ваш.) Теперь вникаю в Ваш код.
Самое любопытное — что у вас делает, для чего 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 уже заметил)
 
что строки перебираются с конца - существенно в данном случае
Это любопытно.
Самое любопытное — что у вас делает List<string> lst = new List<string>(); для чего это ?
Что можно класть в string? Впрочем, у меня даже вопросы неумелые.
 
Последнее редактирование:
Это любопытно.
Самое любопытное — что у вас делает 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

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