Поиск в таблице ячейки и запись в строку этой ячейки.

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

ferr9918

Client
Регистрация
20.01.2014
Сообщения
201
Реакции
97
Баллы
28
Вообщем решаю такую задачу

Есть таблица в которой присутствуют столбцы (ip|mail|pass|login|activ|) количество строк окола 450-500. В процессе выполнения шаблона мне необходимо произвести проверку наличия в столбце mail определенного адреса и если находится строка с такой почтой то необходимо в этой строчке в столбце activ поставить +

На данный момент я решаю эту проблему таким образом:
Беру каждую ячейку начиная с первой в столбце mail и сравниваю с тем адресом который я ищу если условие выполняется то вписываю в столбец activ + если не нахожу то делаю соответствующее сообщение. Все бы ничего но время тратится на перебор каждой строки не мало поэтому вот и решил может кто предложит более рациональное решение.
 
Цикл в любом случае нужен, но возможно его реализация на C# будет быстрее, чем на кубиках.
 
Да я вот и подумал о C# мож кто подскажет.
 
У меня завалялся такой сниппет, но это, по-моему, поиск по списку
Код:
Развернуть Свернуть Копировать
// берем из переменной текст, который надо искать
var textContains = project.Variables["text"].Value;
// получаем таблицу, в которой будем искать
var sourceTable = project.Tables["screenshots"];
// ищем в каждой строчке в таблице
lock(SyncObjects.TableSyncer)
{
for(int i=0; i < sourceTable.RowCount; i++)
{
// читаем строку из таблицы (это будет массив ячеек)
var cells = sourceTable.GetRow(i).ToArray();
// пройдем в цикле по всем ячейкам
for (int j=0; j < cells.Length; j++)
{
// проверяем содержание текста в ячейке, если есть совпадение возвращаем "yes"
if (cells[j].Contains(textContains))
return i;
}
}
}
// если ничего не нашли возвращаем "no"
return "54321";
 
  • Оценить
Реакции: nussus
Ага разобрался и помог еще наш одноклубник
Radzhab
 
Ага разобрался и помог еще наш одноклубник
Radzhab
хорошо, а файл на с# для поиска по таблице уже можете выложить, он у вас ищет только по столбцу mail или по всем столбцам?
в результате вам дает номер строки?
 
Добрый день! А как заставить этот код искать по точному совпадению сего содержания ячейки?
Сейчас, если есть две ячейки: цвет корпуса, цвет. По поиском по значению цвет, он находит цвет корпуса, так как он стоит первым.
 
Каким образом вы проверку осуществляете? у меня вот нормально всё проверило. upload_2017-4-7_13-5-5.png
Как видите результат - false.
Подозреваю, что вы ищите через регулярку. Тогда логично, что "Цвет" является частью фразы "Цвет корпуса"

Вот так сделайте
upload_2017-4-7_13-6-26.png
и будет всё правильно работать
 
Возможно, кому-то пригодится, следующий сниппет ищет строку в которой находится ячейка полностью совпадающая с искомой строкой.

Код:
Развернуть Свернуть Копировать
// берем из переменной текст, который надо искать
var textContains = project.Variables["prod_mpn"].Value;
// получаем таблицу, в которой будем искать
var sourceTable = project.Tables["stock_start_base"];
// ищем в каждой строчке в таблице
lock(SyncObjects.TableSyncer)
{
    for(int i=0; i < sourceTable.RowCount; i++)
        {
           

        // читаем строку из таблицы (это будет массив ячеек)
        var cells = sourceTable.GetRow(i).ToArray();
           
        // пройдем в цикле по всем ячейкам
        for (int j=0; j < cells.Length; j++)
            {
                // проверяем содержание текста в ячейке, если есть совпадение возвращаем "yes"
                if (cells[j].Contains(textContains)){
                   
                     // После того как найдено первое совпадение, получаем значение ячейки в переменную findText
                     var findText = cells[j];
                   
                     //Сравниваем значение найденой ячейки с искомым текстом, если равно, возвращаем номер строки, если нет идём дальше
                     if(findText==textContains){
                        return i;
                     }
                     
                     else {
                        j++;
                    }
                   
                }
            }
        }
    // если ничего не нашли возвращаем "no"
    return "no";
}
 
Привет! Помогите, плиз!

Есть 2 таблицы.
В таблице source 2 столбца
В первом столбце название изделия, во втором его цена

В таблице final куча столбцов, первый из которых тоже название изделия, а остальные цены из разных магаинов (каждому магазину отдельный столбец)

Задача: Берём значение A-0 из Source(допустим это iphonex), и проверяем в цикле есть ли это значение (iphonex) в столце A таблицы final.
В случае если значение найдено, то берём A-1 из Source (цена товара) и переменную g, в которой записан номер нужного столбца (это отдельный сниппет) и пишем в получившуюся ячейку цену товара.

Если значение A-0 из Source не найдено в столбце A таблицы final, то нужно значение A-0 записать в A столбец таблицы final после всех, уже записанных в столбце строк, и после этого как в первом варианте взять A-1 из Source и записать его в строку, в которой у нас теперь A-0 и в столбец, номер которого лежит в g

Я что-то сделал, но оно совсем не работает и зацикливается в адовый бесконечный цикл.
Всем благ!



Код:
Развернуть Свернуть Копировать
var source = project.Tables["temp"];
var final = project.Tables["result"];
string g = project.Variables["market"].Value; // номер столбца магазина из таблицы source в таблице final приходит из вне

for(int i=0; i < source.RowCount; i++)
{
        string p1 = source.GetCell("A",i);
        string p2 = source.GetCell("B",i);
        string cell = final.GetCell("A", i);
        final.SetCell(g, i , p2);
    for(int t=0; t < sourceTable.RowCount; t++)
    {
        // читаем строку из таблицы (это будет массив ячеек)
        string cells = sourceTable.GetRow(t).ToArray();
        // проверяем вторую ячейку регулярным выражением, если есть совпадение кладем результат во вторую таблицу
        if (cells[t].Contains(p1)){
            final.SetCell(g, t, p1);
        }
    }
       
}

Для наглядности попытался визуально показать эти 2 таблицы.
1. Source в которой лежат товары и цены
E91niCW41tE.jpg



2. final в которой будут записаны цены на товары в разных магазинах
n6_Bsn8h0hA.jpg
 
Ребят, очень нужна помощь

Есть таблица http://prntscr.com/kxza0h
мне нужно найти номера всех строк с user1, как это сделать?
 
В таблице могу получить строку, содержащую почту. Не знаю, как получить номер строки.
Для этого хочу добавить в один из столбцов номера по возрастанию.
Как это сделать не по ячейкам, а сразу?

Сниппет отсюда подойдёт? https://zennolab.com/discussion/threads/poisk-po-tablice.51640/#post-385512
Код:
Развернуть Свернуть Копировать
var tbl = project.Tables["tablica"];
var lst = project.Lists["spisok"];
for(int i=0; i < tbl.RowCount; i++)
{
        string u = tbl.GetCell("B",i); //В колонке "B" 
        if(u.Contains(user1)) lst.Add(i.ToString()); //Если обнаружило user1 кладем номер строки в список

}
 
Последнее редактирование:
В таблице могу получить строку, содержащую почту. Не знаю, как получить номер строки.
C#:
Развернуть Свернуть Копировать
IZennoTable table = project.Tables["Test"];

for(int i = 0; i < table.RowCount; i++)
{
    if (table.GetCell("A", i).Contains(project.Variables["email"].Value)) 
    {
        return i;
    }
}
throw new Exception("email не найден."); //ошибка, если не найден
 
  • Оценить
Реакции: Piston, Kuki и __Maks
Можно код для работы с списком?
 
Возможно, кому-то пригодится, следующий сниппет ищет строку в которой находится ячейка полностью совпадающая с искомой строкой.

Код:
Развернуть Свернуть Копировать
// берем из переменной текст, который надо искать
var textContains = project.Variables["prod_mpn"].Value;
// получаем таблицу, в которой будем искать
var sourceTable = project.Tables["stock_start_base"];
// ищем в каждой строчке в таблице
lock(SyncObjects.TableSyncer)
{
    for(int i=0; i < sourceTable.RowCount; i++)
        {
          

        // читаем строку из таблицы (это будет массив ячеек)
        var cells = sourceTable.GetRow(i).ToArray();
          
        // пройдем в цикле по всем ячейкам
        for (int j=0; j < cells.Length; j++)
            {
                // проверяем содержание текста в ячейке, если есть совпадение возвращаем "yes"
                if (cells[j].Contains(textContains)){
                  
                     // После того как найдено первое совпадение, получаем значение ячейки в переменную findText
                     var findText = cells[j];
                  
                     //Сравниваем значение найденой ячейки с искомым текстом, если равно, возвращаем номер строки, если нет идём дальше
                     if(findText==textContains){
                        return i;
                     }
                    
                     else {
                        j++;
                    }
                  
                }
            }
        }
    // если ничего не нашли возвращаем "no"
    return "no";
}
А как сделать чтобы искало не по всем ячейкам , а только по определенному стобцу? Например искало только в первом столбце.
 
А как сделать чтобы искало не по всем ячейкам , а только по определенному стобцу? Например искало только в первом столбце.
вроде в коде всё расписано, не сложно там исправить на нужное что тебе надо, лень чтоли ?
 
Возможно, кому-то пригодится, следующий сниппет ищет строку в которой находится ячейка полностью совпадающая с искомой строкой.

Код:
Развернуть Свернуть Копировать
// берем из переменной текст, который надо искать
var textContains = project.Variables["prod_mpn"].Value;
// получаем таблицу, в которой будем искать
var sourceTable = project.Tables["stock_start_base"];
// ищем в каждой строчке в таблице
lock(SyncObjects.TableSyncer)
{
    for(int i=0; i < sourceTable.RowCount; i++)
        {
          

        // читаем строку из таблицы (это будет массив ячеек)
        var cells = sourceTable.GetRow(i).ToArray();
          
        // пройдем в цикле по всем ячейкам
        for (int j=0; j < cells.Length; j++)
            {
                // проверяем содержание текста в ячейке, если есть совпадение возвращаем "yes"
                if (cells[j].Contains(textContains)){
                  
                     // После того как найдено первое совпадение, получаем значение ячейки в переменную findText
                     var findText = cells[j];
                  
                     //Сравниваем значение найденой ячейки с искомым текстом, если равно, возвращаем номер строки, если нет идём дальше
                     if(findText==textContains){
                        return i;
                     }
                    
                     else {
                        j++;
                    }
                  
                }
            }
        }
    // если ничего не нашли возвращаем "no"
    return "no";
}


Братишка спасибо)
 
  • Оценить
Реакции: __Maks
Как можно найти нужную строку по колонке "ID товара", и в ячейке "Примечание" заменить информацию. Заранее спасибо!1212.png
 
Как можно найти нужную строку по колонке "ID товара", и в ячейке "Примечание" заменить информацию. Заранее спасибо!Посмотреть вложение 71952
Вот тут есть снипет получения номера строки по содержимому в нужном столбце таблицы.
Соответственно, получаете этот номер строки и далее можете уже обычным действием "Операции над таблицей" записать в таблицу нужное значение, используя этот номер строки и номер столбца, заранее известный вам.
 
  • Оценить
Реакции: kolina

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