Как удалить строки с дублями ячеек таблицы

todayer

Client
Регистрация
07.08.2013
Сообщения
958
Благодарностей
397
Баллы
63
Всем привет. Бъюсь и не могу 2й день решить задачу. Есть таблица с3мя столбцами. В столбце B всегда рандомный текст. Как удалить строки с совпадением всех ячеек, игнорируя столбец B? (как на скрине совпадают строка 1 и 4). Желательно решение кубиками, помогите.
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 762
Благодарностей
1 391
Баллы
113
Примерно так
C#:
var tbl = project.Tables["tbl"];
tbl.Clear(); // это для полной очистки экспериментальной таблицы в PM т.к я ее заполняю сдесь же, для реальной таблицы не применять (!!!!), а то будет чистится на каждом запуске
tbl.ColSeparator = "\t";

// зваолняем эксперименталотную таблицу

tbl.AddRow("aaa"+"\t"+"sdfsfsfas"+"\t"+"bbb");
tbl.AddRow("ccc"+"\t"+"dfge5bcss"+"\t"+"ddd");
tbl.AddRow("aaa"+"\t"+"sdfsfdsa33"+"\t"+"bbb");
tbl.AddRow("vvv"+"\t"+"dfge5bcss"+"\t"+"bbbb");

List<int> indexes = new List<int>();


for(int i=0; i<tbl.RowCount; i++){
 
    var row1 = tbl.GetRow(i).ToList();
    string x1 = row1[0]+row1[2];
 
   for(int j=0; j<tbl.RowCount; j++){
       if ( i != j ){
        var row2 = tbl.GetRow(j).ToList();
        string x2 = row2[0]+row2[2];
     
        if ( x1 == x2){
            if ( indexes.IndexOf(i) == -1 )
            indexes.Add(i);    
            if ( indexes.IndexOf(j) == -1 )
            indexes.Add(j);
        }
    }
   
   
   }
 
}


indexes.Sort();
indexes.Reverse();


for(int i=0; i<indexes.Count; i++){
    int index = indexes[i];
    tbl.DeleteRow(index);
}
сама таблица в PM

1645455801493.png

после отработки кубика

89085
 
Последнее редактирование:
  • Спасибо
Реакции: todayer

todayer

Client
Регистрация
07.08.2013
Сообщения
958
Благодарностей
397
Баллы
63
Примерно так
C#:
var tbl = project.Tables["tbl"];
tbl.Clear(); // это для полной очистки экспериментальной таблицы в PM т.к я ее заполняю сдесь же, для реальной таблицы не применять (!!!!), а то будет чистится на каждом запуске
tbl.ColSeparator = "\t";

// зваолняем эксперименталотную таблицу

tbl.AddRow("aaa"+"\t"+"sdfsfsfas"+"\t"+"bbb");
tbl.AddRow("ccc"+"\t"+"dfge5bcss"+"\t"+"ddd");
tbl.AddRow("aaa"+"\t"+"sdfsfdsa33"+"\t"+"bbb");
tbl.AddRow("vvv"+"\t"+"dfge5bcss"+"\t"+"bbbb");

List<int> indexes = new List<int>();


for(int i=0; i<tbl.RowCount; i++){

    var row1 = tbl.GetRow(i).ToList();
    string x1 = row1[0]+row1[2];

   for(int j=0; j<tbl.RowCount; j++){
       if ( i != j ){
        var row2 = tbl.GetRow(j).ToList();
        string x2 = row2[0]+row2[2];
    
        if ( x1 == x2){
            if ( indexes.IndexOf(i) == -1 )
            indexes.Add(i);   
            if ( indexes.IndexOf(j) == -1 )
            indexes.Add(j);
        }
    }
  
  
   }

}


indexes.Sort();
indexes.Reverse();


for(int i=0; i<indexes.Count; i++){
    int index = indexes[i];
    tbl.DeleteRow(index);
}
сама таблица в PM

Посмотреть вложение 89084

после отработки кубика

Посмотреть вложение 89085
Спасибо. Но я ничего не понял, к сожалению.
 

WebBot

Client
Регистрация
04.04.2015
Сообщения
1 762
Благодарностей
1 391
Баллы
113
1) Создать в PM таблицу, указать путь к файлу, поставить галки загржать из файла, сохранять изменения таблицы в файл, тип .xls, xlsx, ... дать таблице название ( в моем примере она называется tbl )
2) Положить в кубик C# код что я кидал выше, кроме этих строк (их просто удалить)

C#:
tbl.Clear(); // это для полной очистки экспериментальной таблицы в PM т.к я ее заполняю сдесь же, для реальной таблицы не применять (!!!!), а то будет чистится на каждом запуске
tbl.ColSeparator = "\t";

// зваолняем эксперименталотную таблицу

tbl.AddRow("aaa"+"\t"+"sdfsfsfas"+"\t"+"bbb");
tbl.AddRow("ccc"+"\t"+"dfge5bcss"+"\t"+"ddd");
tbl.AddRow("aaa"+"\t"+"sdfsfdsa33"+"\t"+"bbb");
tbl.AddRow("vvv"+"\t"+"dfge5bcss"+"\t"+"bbbb");
3) если таблица называется не tbl, а как-то по другому, то подправить на нужное ... например для названия supertable будет так
C#:
var tbl = project.Tables["supertable"];
3) Все готово. Можно выполнить кубик и посмотреть на изменения в таблице. Кстати, изменения в файле иногда происходят в PM/ZP с небольшой задержкой (изначально все быстро меняется в памяти и новые данные сразу же доступны, но в файл изменения скидываются не сразу, а через сколько-то секунд) т.ч смотреть на изменения в файле нужно спустя секунд 5 после отработки кубика, что бы PM точно успел его переписать
 
  • Спасибо
Реакции: todayer

todayer

Client
Регистрация
07.08.2013
Сообщения
958
Благодарностей
397
Баллы
63

todayer

Client
Регистрация
07.08.2013
Сообщения
958
Благодарностей
397
Баллы
63
1) Создать в PM таблицу, указать путь к файлу, поставить галки загржать из файла, сохранять изменения таблицы в файл, тип .xls, xlsx, ... дать таблице название ( в моем примере она называется tbl )
2) Положить в кубик C# код что я кидал выше, кроме этих строк (их просто удалить)

C#:
tbl.Clear(); // это для полной очистки экспериментальной таблицы в PM т.к я ее заполняю сдесь же, для реальной таблицы не применять (!!!!), а то будет чистится на каждом запуске
tbl.ColSeparator = "\t";

// зваолняем эксперименталотную таблицу

tbl.AddRow("aaa"+"\t"+"sdfsfsfas"+"\t"+"bbb");
tbl.AddRow("ccc"+"\t"+"dfge5bcss"+"\t"+"ddd");
tbl.AddRow("aaa"+"\t"+"sdfsfdsa33"+"\t"+"bbb");
tbl.AddRow("vvv"+"\t"+"dfge5bcss"+"\t"+"bbbb");
3) если таблица называется не tbl, а как-то по другому, то подправить на нужное ... например для названия supertable будет так
C#:
var tbl = project.Tables["supertable"];
3) Все готово. Можно выполнить кубик и посмотреть на изменения в таблице. Кстати, изменения в файле иногда происходят в PM/ZP с небольшой задержкой (изначально все быстро меняется в памяти и новые данные сразу же доступны, но в файл изменения скидываются не сразу, а через сколько-то секунд) т.ч смотреть на изменения в файле нужно спустя секунд 5 после отработки кубика, что бы PM точно успел его переписать
Большое спасибо!
 

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