Помощь с написанием C#

Sunrider

Client
Регистрация
07.11.2015
Сообщения
234
Благодарностей
20
Баллы
18
Здравствуйте. Помогите пожалуйста написать C#
А то перебором по одной строке долго очень получается.
В прайсе A нужно нужно отредактировать столбик J (item_group_id). Проставить туда категории товаров которые берем с прайса B.
Получается логика что делал в зенке:
С прайса A берем id товара (столбик A).
Ищем этот id товара в прайсе B (столбик С Артикул/SKU).
Когда находим этот товар в прайсе B, копируем категорию этого товара со столбика A.
И переносим ее в прайс A в столбик J (item_group_id).
Таким образом нужно перенести категории товаров с прайса B в прайс A в соответствии id/SKU.
Надеюсь объяснил понятно.
 

Вложения

ZComand

Client
Регистрация
02.02.2016
Сообщения
57
Благодарностей
63
Баллы
18
Объяснил ты понятно, только вот это уже задание на разработку, которое должно быть оплачено )).
Вот если бы ты постарался немного попробовал сделать это самостоятельно, и у тебя бы в ходе решения этой задачи возникли вопросы, тогда думаю тебе бы помогли ))
Ну конечно твои старания должны быть оформлены в виде аттача твоего кода в этом топике.
 
  • Спасибо
Реакции: orka13

Sunrider

Client
Регистрация
07.11.2015
Сообщения
234
Благодарностей
20
Баллы
18
Та пару долларов за рабочий кубик, то не жалко подкинуть.
 

TwistDanceR

Активный пользователь
Регистрация
30.05.2019
Сообщения
479
Благодарностей
200
Баллы
43
Та пару долларов за рабочий кубик, то не жалко подкинуть.
Привет. На самом деле самому лучше разбираться ) Я вот пока делал это - научился с массивами работать.
Проект в приложении. В C# Коде, чтобы помещалось в Столбец J - ему надо указать номер 9
Код:
string tablename = "Price A";
string listname = "skuListMain";
string skulist = "Price B";
int column = 0;
string[] ta = project.Tables[tablename].GetColumn(0).ToArray();
string[] tb = project.Tables[skulist].GetColumn(2).ToArray();
string[] tc = project.Tables[skulist].GetColumn(0).ToArray();
for(int i = 0; i < ta.Length; i++)
{
    if( ta[i].Equals(tb)) column = i;
    project.Tables[tablename].SetCell(10,i,tc[i]); // вот тут - setcell(9,i,tc[i]);
}
Можно ещё побаловаться и добавить прямой путь к файлам, но это уже не моя забота ))
Если считаешь, что это того стоит - от "пары-тройки" баксов не откажусь) желательно в рублях :D
 

Вложения

TwistDanceR

Активный пользователь
Регистрация
30.05.2019
Сообщения
479
Благодарностей
200
Баллы
43
Объяснил ты понятно, только вот это уже задание на разработку, которое должно быть оплачено )).
Вот если бы ты постарался немного попробовал сделать это самостоятельно, и у тебя бы в ходе решения этой задачи возникли вопросы, тогда думаю тебе бы помогли ))
Ну конечно твои старания должны быть оформлены в виде аттача твоего кода в этом топике.
Я сделяль, я оформиль))) Как тебе такой шаг в изучении C# за 2часа? )) P.S. За вчерашнюю поправку - ещё раз спасибо))
P.S. не продешевил с 2-3 баксами? xD
 
  • Спасибо
Реакции: ZComand и Sunrider

Sunrider

Client
Регистрация
07.11.2015
Сообщения
234
Благодарностей
20
Баллы
18
Спасибо большое за попытку помощь. К сожалению раньше немного уже скинули в скайп проект.
Хорошо что "Я вот пока делал это - научился с массивами работать.". Время потрачено не зря, а с пользой.

upload_2019-9-4_14-23-59.png
 

TwistDanceR

Активный пользователь
Регистрация
30.05.2019
Сообщения
479
Благодарностей
200
Баллы
43
Спасибо большое за попытку помощь. К сожалению раньше немного уже скинули в скайп проект.
Хорошо что "Я вот пока делал это - научился с массивами работать.". Время потрачено не зря, а с пользой.

Посмотреть вложение 41491
Ради Бога ) Опыт бесценнен) Да и есть косячок в моём проекте, уже разбираюсь(почти разобрался) в чем дело) Спасибо.
 
  • Спасибо
Реакции: Sunrider

Sunrider

Client
Регистрация
07.11.2015
Сообщения
234
Благодарностей
20
Баллы
18
Спасибо. Тема закрывается.
 

Sunrider

Client
Регистрация
07.11.2015
Сообщения
234
Благодарностей
20
Баллы
18

TwistDanceR

Активный пользователь
Регистрация
30.05.2019
Сообщения
479
Благодарностей
200
Баллы
43
Но за попытку помочь с меня лайки.
Я бы конечно попросил посмотреть, как реализовано у того человека, что тебе скинул, но я просто оставлю здесь поправку к своему снипетту. Отрабатывает в касание - без циклов. Задача решается за секунду)

Поправка к моему прошлому сниппету:
Код:
string table1 = "Price A";
string table2 = "Price B";
int column = 0;
string[] ta = project.Tables[table1].GetColumn(0).ToArray();
string[] tb = project.Tables[table2].GetColumn(2).ToArray();
string[] tc = project.Tables[table2].GetColumn(0).ToArray();
int i = 0 ; int j = 0;
for(i=0;i<ta.Length; i++) {
    for(j=0;j<tb.Length;j++) {
        if(ta[i]==tb[j]) project.Tables[table1].SetCell(10,i,tc[j]);
    }
}
 

ZComand

Client
Регистрация
02.02.2016
Сообщения
57
Благодарностей
63
Баллы
18
Поправка к моему прошлому сниппету:
В твоей реализации есть небольшой минус ))
если в таблице tb будет несколько совпадений то в конечной таблице будет результат последнего вхождения )). для того что бы было первое вхождение и чтобы второй цикл не выполнял лишней работы (это заметно на 10к+ строк) нужно добавить слово break; вот так:
Код:
for(i=0;i<ta.Length; i++) {
    for(j=0;j<tb.Length;j++) {
        if(ta[i]==tb[j]) project.Tables[table1].SetCell(10,i,tc[j]);
        break; // прерываем вложенный цикл
    }
}
 
  • Спасибо
Реакции: TwistDanceR

TwistDanceR

Активный пользователь
Регистрация
30.05.2019
Сообщения
479
Благодарностей
200
Баллы
43
В твоей реализации есть небольшой минус ))
если в таблице tb будет несколько совпадений то в конечной таблице будет результат последнего вхождения )). для того что бы было первое вхождение и чтобы второй цикл не выполнял лишней работы (это заметно на 10к+ строк) нужно добавить слово break; вот так:
Код:
for(i=0;i<ta.Length; i++) {
    for(j=0;j<tb.Length;j++) {
        if(ta[i]==tb[j]) project.Tables[table1].SetCell(10,i,tc[j]);
        break; // прерываем вложенный цикл
    }
}
Спасибо за комментарий) Ништяк, надо бы осознать, когда он реально понадобится.
Насколько я знаю, таблы такого содержимого чистятся от совпадающих значений ДО обработки вручную ( а если это выгрузка из админки какой-нибудь, там больше одного результата по совпадению в принципе быть не должно), поэтому я сделал себе небольшое послабление)) Ну тут, кстати в tb как раз чуть больше 10к строк, однако сниппет выполняется за секунду :-)

UPD>.... ААААА... ааааа, я понял... то есть если найдено значение - то цикл стопится. Например, если найденное в tb под номером j=1 (2я строка например) - он не будет продолжать досчитывать все остальные итерации вложенного цикла. Верняк?! :D
Воще огромное спасибо)

P.S. Мне кажется ты за 3 года на форуме больше всего общаешься в темах, где участвую я))))
 

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