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

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

Igorii

Client
Регистрация
21.02.2015
Сообщения
375
Реакции
311
Баллы
63
Не пойму, есть таблица, некоторые строки которого содержат текст1 и текст2. Нужно удалить строки не содержащие эти тексты. В экшене Операции над таблицей - Удаление строк - Удалить элементы, не удовлетворяющие регулярному выражению, прописывал так - текст1|текст2 и так (текст1|текст2), но строки не удаляются. Шаблон, Зенку и компьютер перезагружал, не помогает. В чём может быть проблема? Может есть снипет делающий то же самое? Очень надо!
 
Нашёл снипеты по удалению строк из списка, спасибо @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
Не пойму, есть таблица, некоторые строки которого содержат текст1 и текст2. Нужно удалить строки не содержащие эти тексты. В экшене Операции над таблицей - Удаление строк - Удалить элементы, не удовлетворяющие регулярному выражению, прописывал так - текст1|текст2 и так (текст1|текст2), но строки не удаляются. Шаблон, Зенку и компьютер перезагружал, не помогает. В чём может быть проблема? Может есть снипет делающий то же самое? Очень надо!
Топорной метод — копируем нужные строки в новую таблицу, очищаем эту и переносим данные в нее
 
  • Спасибо
Реакции: Igorii
Не пойму, есть таблица, некоторые строки которого содержат текст1 и текст2. Нужно удалить строки не содержащие эти тексты. В экшене Операции над таблицей - Удаление строк - Удалить элементы, не удовлетворяющие регулярному выражению, прописывал так - текст1|текст2 и так (текст1|текст2), но строки не удаляются. Шаблон, Зенку и компьютер перезагружал, не помогает. В чём может быть проблема? Может есть снипет делающий то же самое? Очень надо!
Код:
Развернуть Свернуть Копировать
(текст1)|(текст2)
:-)
 
  • Спасибо
Реакции: C2H5OH и Igorii
Код:
Развернуть Свернуть Копировать
(текст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);
    }
}
 

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