Удалить из таблицы строки со значениями из списка

Mitnik

Client
Регистрация
22.12.2014
Сообщения
118
Благодарностей
6
Баллы
18
Здравствуйте!

Помогите, пожалуйста, подобрать вариант максимально быстрой очистки таблицы.
Имеется таблица CSV - 130 000 строк и список - 85 000 строк.
Количество строк в списке и таблице постоянно увеличивается.
Задача - удалить из таблицы строки, содержащие в любой колонке значения из списка.
В списке - только номера телефонов.
В таблице - 12 колонок, колонка с номерами телефонов, по которым нужно очистить таблицу - "H".
Комп - 6/12, 16ГБ.

Пробовал:
1 вариант:
Многопоток с физическими файлами списка и таблицы.
Брал из списка строку с удалением и удалял ее из таблицы.
Операция занимает 7 часов.

2. Копировал данные из файлов списка и таблицы в виртуальные список и таблицу без привязки к файлам.
Брал из списка строку с удалением и удалял ее из таблицы.
Затем выгружал очищенную таблицу в файл CSV.
Операция занимает тоже порядка 6...7 часов.

3. Нашел такой сниппет:

C#:
var firstList = project.Tables["TEMP_for_DELETE"];

var secondList = project.Lists["SPISOK_TEMP_FOR_DELETE"];

var rows = firstList.RowCount;


lock(SyncObjects.ListSyncer)

{

for(int i=0; i < secondList.Count; i++)

    {

        var str1 = secondList;

        for(int j=firstList.RowCount-1; j >= 0; j--)

        {

            var str2 = firstList.GetCell(0,j);

            if (str1 == str2)

            {

                firstList.DeleteRow(j);

            }     

        }     

    }

}
Копировал данные из файлов списка и таблицы в виртуальные список и таблицу без привязки к файлам.
Запускал код сниппета.
Затем выгружал очищенную таблицу в файл CSV.
Операция занимает 20 минут.
Но ... код, почему-то, у меня работает некорректно.
Хотя, в ветке где я его нашел, автор пишет, что работает нормально.
Остаются лишние не удаленные данные в таблице.

Помогите, пожалуйста, найти вариант максимально быстрой обработки в ZennoPoster.
 
Последнее редактирование модератором:

Sherminator

Client
Регистрация
10.09.2021
Сообщения
1 238
Благодарностей
671
Баллы
113
Здравствуйте!

Помогите, пожалуйста, подобрать вариант максимально быстрой очистки таблицы.
Имеется таблица CSV - 130 000 строк и список - 85 000 строк.
Количество строк в списке и таблице постоянно увеличивается.
Задача - удалить из таблицы строки, содержащие в любой колонке значения из списка.
В списке - только номера телефонов.
В таблице - 12 колонок, колонка с номерами телефонов, по которым нужно очистить таблицу - "H".
Комп - 6/12, 16ГБ.

Пробовал:
1 вариант:
Многопоток с физическими файлами списка и таблицы.
Брал из списка строку с удалением и удалял ее из таблицы.
Операция занимает 7 часов.

2. Копировал данные из файлов списка и таблицы в виртуальные список и таблицу без привязки к файлам.
Брал из списка строку с удалением и удалял ее из таблицы.
Затем выгружал очищенную таблицу в файл CSV.
Операция занимает тоже порядка 6...7 часов.

3. Нашел такой сниппет:

var firstList = project.Tables["TEMP_for_DELETE"];
var secondList = project.Lists["SPISOK_TEMP_FOR_DELETE"];
var rows = firstList.RowCount;

lock(SyncObjects.ListSyncer)
{
for(int i=0; i < secondList.Count; i++)
{
var str1 = secondList;
for(int j=firstList.RowCount-1; j >= 0; j--)
{
var str2 = firstList.GetCell(0,j);
if (str1 == str2)
{
firstList.DeleteRow(j);
}
}
}
}

Копировал данные из файлов списка и таблицы в виртуальные список и таблицу без привязки к файлам.
Запускал код сниппета.
Затем выгружал очищенную таблицу в файл CSV.
Операция занимает 20 минут.
Но ... код, почему-то, у меня работает некорректно.
Хотя, в ветке где я его нашел, автор пишет, что работает нормально.
Остаются лишние не удаленные данные в таблице.

Помогите, пожалуйста, найти вариант максимально быстрой обработки в ZennoPoster.
Примеры списков можно увидеть?
 

Mitnik

Client
Регистрация
22.12.2014
Сообщения
118
Благодарностей
6
Баллы
18

Mitnik

Client
Регистрация
22.12.2014
Сообщения
118
Благодарностей
6
Баллы
18
Судя по всему, сниппет выше постом, который я нашел, удаляет ТОЛЬКО ПЕРВУЮ попавшуюся строку со значением в таблице.
Помогите, пожалуйста, доработать сниппет, чтобы он удалял ВСЕ строки с совпадениями.
 

Devostator

Client
Регистрация
17.09.2011
Сообщения
262
Благодарностей
25
Баллы
28
К сожалению, с данными не получится, нельзя.
Там персоналка ...
Можно было заменить данные и выдать их как пример. Вас же не сами данные просили.

Столкнулся с такой же проблемой.

Нужно отфильтровать табличку (база) по блеклисту (список) по столбцу 6. Ищу по форуму уже час, пока безуспешно :(

Может кто-нибудь подскажет?

По сути в таблице в ячейке столбца 6 допустим:

Строка 1: Ячейка 6: собака кот жираф
Строка 2: Ячейка 6: молоко кефир
Строка 3: Ячейка 6: дома дачи

В блеклисте есть строка: кот

Если да, то в таблице нужно удалить строку 1.

Хочу через C#.

В табличке ~100-500к строк.
В блек листе
 

Devostator

Client
Регистрация
17.09.2011
Сообщения
262
Благодарностей
25
Баллы
28
Можно было заменить данные и выдать их как пример. Вас же не сами данные просили.

Столкнулся с такой же проблемой.

Нужно отфильтровать табличку (база) по блеклисту (список) по столбцу 6. Ищу по форуму уже час, пока безуспешно :(

Может кто-нибудь подскажет?

По сути в таблице в ячейке столбца 6 допустим:

Строка 1: Ячейка 6: собака кот жираф
Строка 2: Ячейка 6: молоко кефир
Строка 3: Ячейка 6: дома дачи

В блеклисте есть строка: кот

Если да, то в таблице нужно удалить строку 1.

Хочу через C#.

В табличке ~100-500к строк.
В блек листе
Отвечу сам себе.

C#:
var firstList = project.Tables["Таблица"];
var secondList = project.Lists["Черный список слов"];
var rows = firstList.RowCount;
int deletedRowsCount = 0; // Переменная для подсчета удаленных строк


for(int i = 0; i < secondList.Count; i++)
{
    var regexPattern = secondList[i];
    var regex = new System.Text.RegularExpressions.Regex(regexPattern);

    for(int j = firstList.RowCount - 1; j >= 0; j--)
    {
        var cellValue = firstList.GetCell(6, j);  // ищем в 7 ячейке
        if (regex.IsMatch(cellValue))
        {
            firstList.DeleteRow(j);
            deletedRowsCount++; // Увеличиваем счетчик удаленных строк
        }
    }
}

project.SendInfoToLog($"Удалено строк: " + deletedRowsCount);
 

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