Не работает удаление строк

Igorii

Client
Регистрация
21.02.2015
Сообщения
371
Благодарностей
297
Баллы
63
Не пойму, есть таблица, некоторые строки которого содержат текст1 и текст2. Нужно удалить строки не содержащие эти тексты. В экшене Операции над таблицей - Удаление строк - Удалить элементы, не удовлетворяющие регулярному выражению, прописывал так - текст1|текст2 и так (текст1|текст2), но строки не удаляются. Шаблон, Зенку и компьютер перезагружал, не помогает. В чём может быть проблема? Может есть снипет делающий то же самое? Очень надо!
 

Igorii

Client
Регистрация
21.02.2015
Сообщения
371
Благодарностей
297
Баллы
63
Нашёл снипеты по удалению строк из списка, спасибо @Dimionix! Буду благодарен, если кто нибудь из гуру C# сможет переделать их для использования с таблицами. Желательно таким образом, что бы искомый текст задавался через переменную и поиск вхождения осуществлялся по заданному столбцу, а при нахождении удалялась вся строка.

СНИПЕТЫ:

Удалить элементы содержащие текст
Код:
var list = project.Lists["List"];
string text = "Текст";
lock (SyncObjects.ListSyncer)
{
    for (int i = 0; i < list.Count; i++)
    {
        string str = list[i];
        if (str.Contains(text))
        {
            list.RemoveAt(i);
            i--;
        }
    }
}
Удалить элементы не содержащие текст
Код:
var list = project.Lists["List"];
string text = "Текст";
lock (SyncObjects.ListSyncer)
{
    for (int i = 0; i < list.Count; i++)
    {
        string str = list[i];
        if (!str.Contains(text))
        {
            list.RemoveAt(i);
            i--;
        }
    }
}
Удалить элементы, удовлетворяющие регулярному выражению
Код:
var list = project.Lists["List"];
Regex reg = new Regex("Регулярка");
lock (SyncObjects.ListSyncer)
{
    for (int i = 0; i < list.Count; i++)
    {
        string str = list[i];
        if (reg.IsMatch(str))
        {
            list.RemoveAt(i);
            i--;
        }
    }
}
Удалить элементы, не удовлетворяющие регулярному выражению
Код:
var list = project.Lists["List"];
Regex reg = new Regex("Регулярка");
lock (SyncObjects.ListSyncer)
{
    for (int i = 0; i < list.Count; i++)
    {
        string str = list[i];
        if (!reg.IsMatch(str))
        {
            list.RemoveAt(i);
            i--;
        }
    }
}
 
  • Спасибо
Реакции: ZSharp

Nord

Client
Регистрация
22.03.2012
Сообщения
2 406
Благодарностей
1 473
Баллы
113
Не пойму, есть таблица, некоторые строки которого содержат текст1 и текст2. Нужно удалить строки не содержащие эти тексты. В экшене Операции над таблицей - Удаление строк - Удалить элементы, не удовлетворяющие регулярному выражению, прописывал так - текст1|текст2 и так (текст1|текст2), но строки не удаляются. Шаблон, Зенку и компьютер перезагружал, не помогает. В чём может быть проблема? Может есть снипет делающий то же самое? Очень надо!
Топорной метод — копируем нужные строки в новую таблицу, очищаем эту и переносим данные в нее
 
  • Спасибо
Реакции: Igorii

Dimionix

Moderator
Регистрация
09.04.2011
Сообщения
3 068
Благодарностей
3 122
Баллы
113
Не пойму, есть таблица, некоторые строки которого содержат текст1 и текст2. Нужно удалить строки не содержащие эти тексты. В экшене Операции над таблицей - Удаление строк - Удалить элементы, не удовлетворяющие регулярному выражению, прописывал так - текст1|текст2 и так (текст1|текст2), но строки не удаляются. Шаблон, Зенку и компьютер перезагружал, не помогает. В чём может быть проблема? Может есть снипет делающий то же самое? Очень надо!
Код:
(текст1)|(текст2)
:-)
 
  • Спасибо
Реакции: C2H5OH и Igorii

Igorii

Client
Регистрация
21.02.2015
Сообщения
371
Благодарностей
297
Баллы
63
Код:
(текст1)|(текст2)
:-)
Блин!:dy: Работает! Спасибо!!!
@Dimionix, можешь переделать снипеты, которые выше, я же правильно понял, что это твои?
Нужен именно поиск по определённому столбцу, так как при поиске по строке, вхождения могут повторяться.
Сделать по аналогии со снипетом ниже, но что бы найденные строки удалялись, а не копировались в другую таблицу.

Код:
// берем регулярное выражение для парсинга из переменной
var parserRegexPattern = project.Variables["tableSearchRegex"].Value;
var parserRegex = new System.Text.RegularExpressions.Regex(parserRegexPattern);
// получаем таблицу, в которой будем искать
var sourceTable = project.Tables["SourceTable"];
// получаем таблицу, в которую будем класть
var destTable = project.Tables["OutputTable"];
// ищем в каждой строчке в таблице
lock(SyncObjects.TableSyncer)
{
    for(int i=0; i < sourceTable.RowCount; i++)
    {
        // читаем строку из таблицы (это будет массив ячеек)
        var cells = sourceTable.GetRow(i).ToArray();
        // проверяем вторую ячейку регулярным выражением, если есть совпадение кладем результат во вторую таблицу
        if (parserRegex.IsMatch(cells[1]))
            destTable.AddRow(cells);
    }
}
 

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