c# работа с таблицами - заказ

ParfeniyAnton

Client
Регистрация
24.08.2014
Сообщения
301
Благодарностей
49
Баллы
28
Привет! Нужна помощь, как бесплатная так и за денежку - всё обсуждаемо.

Есть 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;

for(int i=0; i < source.RowCount; i++)
{
        string p1 = source.GetCell("A",i);
        string p2 = source.GetCell("B",i);
    for(int j=0; j < final.RowCount; j++)
    {   
        string cell = final.GetCell("A", j);

        if(cell == p1){
            final.SetCell(g, j , p2);
        }
        else{
          final.SetCell(g, j , p1);               
        }
    }
}
1. Таблица Source - из неё берём название товара и ищем это название в A столбце таблицы final, и после этого берём цену и закидываем в нужный столбец магазина.



2. Таблица final - сюда собственно всё будет заполняться.
Таблицы приведены для наглядности.

 

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
а как понять заказ ?
ты заказываешь или у тебя заказ ? )
 

ТРОН

Client
Регистрация
31.07.2016
Сообщения
336
Благодарностей
381
Баллы
63

ssXXXss

Client
Регистрация
23.12.2014
Сообщения
7 379
Благодарностей
2 041
Баллы
113
Товарищ как бы намекает, что готов оплатить помощь)) т.е. он заказывает)
что то так быстро прочитал что на первую строку и внимания не обратил ))), видимо уже нашёл исполнителя
 

ZennoScript

Moderator
Регистрация
04.03.2011
Сообщения
4 451
Благодарностей
1 885
Баллы
113
Привет! Нужна помощь, как бесплатная так и за денежку - всё обсуждаемо.

Есть 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;

for(int i=0; i < source.RowCount; i++)
{
        string p1 = source.GetCell("A",i);
        string p2 = source.GetCell("B",i);
    for(int j=0; j < final.RowCount; j++)
    { 
        string cell = final.GetCell("A", j);

        if(cell == p1){
            final.SetCell(g, j , p2);
        }
        else{
          final.SetCell(g, j , p1);             
        }
    }
}
1. Таблица Source - из неё берём название товара и ищем это название в A столбце таблицы final, и после этого берём цену и закидываем в нужный столбец магазина.



2. Таблица final - сюда собственно всё будет заполняться.
Таблицы приведены для наглядности.

Попробуйте так:
Код:
var source = project.Tables["temp"];
var final = project.Tables["result"];
string g = project.Variables["market"].Value;
string cell, p1, p2, check ="";

int count = source.RowCount;
for(int i=0; i < count; i++)
{
    p1 = source.GetCell("A",i);
    p2 = source.GetCell("B",i);
    int countFinal = final.RowCount;
    for(int j=0; j < countFinal; j++)
    {
        cell = final.GetCell("A", j);
        if(cell == p1)
        {
            final.SetCell(g, j , p2);
            check = "true";
            break;
        }
    }
    if(check !="true")
    {
        final.AddRow(p1);
        final.SetCell(g,countFinal,p2);
    }
        check = "";
}
 

ParfeniyAnton

Client
Регистрация
24.08.2014
Сообщения
301
Благодарностей
49
Баллы
28
Всем спасибо! Выкладываю рабочий код для потомков!
Код:
var source = project.Tables["temp"];
var final = project.Tables["result"];
string g = project.Variables["market"].Value;

for(int i=0; i< source.RowCount; i++)
{
    var isFound = false;
    var key = source.GetCell("A",i);
    var value = source.GetCell("B",i);
   
    for(int j=0; j<final.RowCount; j++)
    {
        if(key == final.GetCell("A",j))
        {
            isFound = true;
            final.SetCell(g, j, value);
            break;
        }
    }
   
    if(!isFound)
    {
        var index = final.RowCount;
        final.AddRow(string.Empty);
        final.SetCell("A", index, key);
        final.SetCell(g, index, value);
    }
}
 
  • Спасибо
Реакции: Mct91 и serg1208

Nord

Client
Регистрация
22.03.2012
Сообщения
2 406
Благодарностей
1 473
Баллы
113
Всем спасибо! Выкладываю рабочий код для потомков!
Код:
var source = project.Tables["temp"];
var final = project.Tables["result"];
string g = project.Variables["market"].Value;

for(int i=0; i< source.RowCount; i++)
{
    var isFound = false;
    var key = source.GetCell("A",i);
    var value = source.GetCell("B",i);

    for(int j=0; j<final.RowCount; j++)
    {
        if(key == final.GetCell("A",j))
        {
            isFound = true;
            final.SetCell(g, j, value);
            break;
        }
    }

    if(!isFound)
    {
        var index = final.RowCount;
        final.AddRow(string.Empty);
        final.SetCell("A", index, key);
        final.SetCell(g, index, value);
    }
}
 

artur23

Client
Регистрация
14.04.2014
Сообщения
202
Благодарностей
15
Баллы
18
Выдает ошибку:
C#:
Выполнение действия CSharp OwnCode. Column name must be one-, two- or three-letter name from A to XFD.
Имя параметра: name
Фактическое значение было .
 

artur23

Client
Регистрация
14.04.2014
Сообщения
202
Благодарностей
15
Баллы
18
Сам код

Код:
var source = project.Tables["categories"];
var final = project.Tables["products"];
string g = project.Variables["market"].Value;

for(int i=0; i< source.RowCount; i++)
{
    var isFound = false;
    var key = source.GetCell("C",i); //ключ = name(ru-ru)
    var value = source.GetCell("A",i); //значение = category_id

    for(int j=0; j<final.RowCount; j++)
    {
        if(key == final.GetCell("E",j))
        {
            isFound = true;
            final.SetCell(g, j, value);
            break;
        }
    }

    if(!isFound)
    {
        var index = final.RowCount;
        final.AddRow(string.Empty);
        final.SetCell("A", index, key);
        final.SetCell(g, index, value);
    }
}
 

kagorec

Client
Регистрация
24.08.2013
Сообщения
979
Благодарностей
523
Баллы
93
Снипет C# в таблице получает номер строки по точному совпадению названия из первой колонки от переменной.
Далее будет удобнее работать с номером строки в стандартных кубиках работы с таблицей.

C#:
string site = project.Variables["ind_site"].Value;
var table = project.Tables["result"];
int rowCount = table.RowCount;
string[] rowData;
string firstColumnValue;
int matchingRowIndex = -1; // Переменная для хранения индекса найденной строки
string var2 = string.Empty; // Объявление переменной var2

for (int i = 0; i < rowCount; i++)
{
    // Получаем строку и значение первой колонки
    rowData = table.GetRow(i).ToArray<string>();
    firstColumnValue = rowData[0];

    // Сравниваем значение первой колонки с переменной site, игнорируя регистр
    if (string.Equals(firstColumnValue, site, StringComparison.OrdinalIgnoreCase))
    {
        matchingRowIndex = i;
        var2 = string.Join("\t", rowData); // Сохраняем строку в var2
        break;
    }
}

// Проверяем, найдено ли совпадение
if (matchingRowIndex == -1)
{
    // Если совпадений не найдено, выводим сообщение в лог
    project.SendInfoToLog("Совпадений не найдено", true);
}

// Возвращаем индекс найденной строки (прибавляем 2 к индексу)
return matchingRowIndex;
 
  • Спасибо
Реакции: bizzon и baracuda

kagorec

Client
Регистрация
24.08.2013
Сообщения
979
Благодарностей
523
Баллы
93

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