Помощь по C#

SlipDez

Client
Регистрация
18.07.2018
Сообщения
398
Благодарностей
71
Баллы
28
Пытаюсь начать писать проекты на c# но выходит не очень, от слова совсем.
94555


Задача стояла в том чтобы бралась таблица в ней искались одинаковые значения(скажем артикул товара) по . колонке и производилась сумма между этими значениями, также с колонкой B между строками где были одинаковые значения и C и результат записывался в таблицу.

Пример исходная таблица

44444 1512 16
55555 41 21 41
44444 23 71 20

Результат на выходе
44444 (15+23)(12+71)(16+20)
55555 41 21 41

Что я пытался сделать
Сам код, если так можно назвать:
//получаем данные таблицы
var table = project.Tables["list_sell"];
var result = project.Tables["tst"];
//получем данные листа арт
var art = project.Lists["art"];
//создаем 3 листа для подсчета
var count_sell = project.Lists["count_sell"]; //до этого делал временную таблицу в формате List <string> = List <string>();
var summ = project.Lists["summ_sell"];
var ostatok = project.Lists["ostatok"];
//берем поочередно артикулы из списка
for (int a=0; a<art.Count;a++){
    //создаем переменную для поиска артикула в таблице регулярное выражение
    string z = art.GetItem(a).ToString;
    string reg = System.Text.RegularExpressions.Regex(z);
        for (int b=0; table.RowCount;b++){
            string str = table.GetRow[b].ToArray();
            //если в строке таблицы  находится артикул то берем данные строки и добавляем значения во временные списки
            if (reg.IsMatch(str)){
                string art = str[5];
                string count = str[12];
                string summ = str[14];
                string ost = str[15];
                count_sell.Add(count);
                summ.Add(summ);
                ostatok.Add(ost);
            }
            else {
                int k = count_sell.Sum();
                double s = summ.Sum();
                int o = ostatok.Sum();
                Table1.ColSeparator = ";";
                result.AddRow(reg;k;s;o);
            }
    
        }
            
};
int не может конвертироваться в строку пробовал .ToString(); но не выходит. Подскажите, что я делаю не так?
 

radv

Client
Регистрация
11.05.2015
Сообщения
3 820
Благодарностей
2 030
Баллы
113
Пытаюсь начать писать проекты на c# но выходит не очень, от слова совсем.
Попробуйте посмотреть обучающие видео по зенно и C#, изучить основы языка, синтаксис, понятие переменных и их типов. Понятие аргументов и параметров, которые передаются в методы. На скриншоте указан номер строки и столбца.
Если вы пишите сами код, то указывайте явно тип, а если используете var то должны сами понимать с каким объектом работаете.
Если используете чужой пример кода, то попытайтесь понять, что там и зачем написано, как работает.
Для работы с кодом лучше используйте VisualStudio, там сразу будете видеть ошибки синтаксиса еще до запуска кода на выполнение
94558

94559

int не может конвертироваться в строку пробовал .ToString(); но не выходит. Подскажите, что я делаю не так?
вы пробуете .ToString; к результату, а не к int в вашем случае это a на 13 строке.

Ну и так далее по номерам строк с ошибками
 
  • Спасибо
Реакции: SlipDez

SlipDez

Client
Регистрация
18.07.2018
Сообщения
398
Благодарностей
71
Баллы
28
Попробуйте посмотреть обучающие видео по зенно и C#, изучить основы языка, синтаксис, понятие переменных и их типов. Понятие аргументов и параметров, которые передаются в методы. На скриншоте указан номер строки и столбца.
Если вы пишите сами код, то указывайте явно тип, а если используете var то должны сами понимать с каким объектом работаете.
Если используете чужой пример кода, то попытайтесь понять, что там и зачем написано, как работает.
Для работы с кодом лучше используйте VisualStudio, там сразу будете видеть ошибки синтаксиса еще до запуска кода на выполнение
Посмотреть вложение 94558
Посмотреть вложение 94559

вы пробуете .ToString; к результату, а не к int в вашем случае это a на 13 строке.

Ну и так далее по номерам строк с ошибками
Немного не понял, подскажите, как эта конструкция должна выглядеть правильно. Когда смотрю простые снипеты которые выкладывают на форуме понимаю что они делают, а когда сам начинаю писать 100500 ошибок. В переменную reg уже попадает значение поиска регулярного выражения правильно понимаю?

Подскажите в чем разница между

C#:
z ="Study";
var reg = new regex(z);
string reg = System.Text.RegularExpressions.Regex(z)
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 794
Благодарностей
2 466
Баллы
113
Таблица - это список массивов.
А значит можно работать с ней как с обычными списками и обычными массивами.
Зашли в кубик - считали данные с таблицы в список.
Выполнили нужные манипуляции.
Очистили таблицу.
Вернули результат обратно.

Набросал пример, как решаются подобные задачи.
Везде где только можно прописал вывод в лог, чтобы было понятно что происходит.
Взятие с табличке зенно и возврат данных обратно закомментировал.
C#:
project.SendInfoToLog("Создаем табличку с демо данными");
var tb = new List<string[]>();
    tb.Add(new[]{"44444","15","12","16"});
    tb.Add(new[]{"55555","41","21","41"});
    tb.Add(new[]{"44444","23","71", "20"});
    
    // Считывание с таблицы зенно в кубик
    // var tb_zp = project.Tables["tb"];
    // for(int i=0;i<tb_zp.RowCount;i++) tb.Add(tb_zp.GetRow(i).ToArray());
    

project.SendInfoToLog("Смотрим в логе что в табличке");
tb.ForEach( x => project.SendInfoToLog(string.Join("|", x)));

project.SendInfoToLog("Создали список с уникальными строчками первого столбца");
var items = new List<string>(); 

project.SendInfoToLog("Берем первый столбец");
items = tb.Select(x=>x[0].Trim()).ToList();

project.SendInfoToLog("Удаляем дубли");
items = items.Distinct().ToList();

project.SendInfoToLog("Смотрим в логе что в списке");
items.ForEach( x => project.SendInfoToLog(x));

project.SendInfoToLog("Создали табличку для хранения результата");
var result = new List<string[]>(); // Сюда сохраним результат

foreach(string item in items) {
    project.SendInfoToLog(string.Format("Взяли строчку: {0}",item));
    var tb_temp = tb.Where(x => x[0] == item).ToList(); // Взяли все строчки по полному совпадению первой ячейки
    project.SendInfoToLog(string.Format("Взяли все строчки по полному совпадению первой ячейки. Нашли строк: {0}",tb_temp.Count));
    if(tb_temp.Count == 0) continue;
    
    var a = tb_temp.Select(x=>int.Parse(x[1])).Sum(); // Подсчитали сумму по второй ячеке
    project.SendInfoToLog(string.Format("Считаем сумму для: {0} Результат: {1}",item, a));
    var b = tb_temp.Select(x=>int.Parse(x[2])).Sum(); // подсчитали сумму по третей ячейке
    project.SendInfoToLog(string.Format("Считаем сумму для: {0} Результат: {1}",item, b));
    var c = tb_temp.Select(x=>int.Parse(x[3])).Sum(); // подсчитали сумму по четвертой ячеке   
    project.SendInfoToLog(string.Format("Считаем сумму для: {0} Результат: {1}",item, c));
    result.Add(new[]{item, a.ToString(), b.ToString(), c.ToString()}); // Записали результат
    project.SendInfoToLog(string.Format("Записали результат для {0}",item));
}

project.SendInfoToLog("Смотрим что получилось");
result.ForEach( x => project.SendInfoToLog(string.Join("|", x)));

// Возвращаем данные в табличку зенно
//project.Tables["tb"].Clear(); // Очистили таблицу
//result.ForEach( x => project.Tables["tb"].AddRow(x)); // записали данные в таблицу зенно
94561

94562
 

SlipDez

Client
Регистрация
18.07.2018
Сообщения
398
Благодарностей
71
Баллы
28
.
 
Последнее редактирование:

SlipDez

Client
Регистрация
18.07.2018
Сообщения
398
Благодарностей
71
Баллы
28
Таблица - это список массивов.
А значит можно работать с ней как с обычными списками и обычными массивами.
Зашли в кубик - считали данные с таблицы в список.
Выполнили нужные манипуляции.
Очистили таблицу.
Вернули результат обратно.

Набросал пример, как решаются подобные задачи.
Везде где только можно прописал вывод в лог, чтобы было понятно что происходит.
Взятие с табличке зенно и возврат данных обратно закомментировал.
C#:
project.SendInfoToLog("Создаем табличку с демо данными");
var tb = new List<string[]>();
    tb.Add(new[]{"44444","15","12","16"});
    tb.Add(new[]{"55555","41","21","41"});
    tb.Add(new[]{"44444","23","71", "20"});
   
    // Считывание с таблицы зенно в кубик
    // var tb_zp = project.Tables["tb"];
    // for(int i=0;i<tb_zp.RowCount;i++) tb.Add(tb_zp.GetRow(i).ToArray());
   

project.SendInfoToLog("Смотрим в логе что в табличке");
tb.ForEach( x => project.SendInfoToLog(string.Join("|", x)));

project.SendInfoToLog("Создали список с уникальными строчками первого столбца");
var items = new List<string>();

project.SendInfoToLog("Берем первый столбец");
items = tb.Select(x=>x[0].Trim()).ToList();

project.SendInfoToLog("Удаляем дубли");
items = items.Distinct().ToList();

project.SendInfoToLog("Смотрим в логе что в списке");
items.ForEach( x => project.SendInfoToLog(x));

project.SendInfoToLog("Создали табличку для хранения результата");
var result = new List<string[]>(); // Сюда сохраним результат

foreach(string item in items) {
    project.SendInfoToLog(string.Format("Взяли строчку: {0}",item));
    var tb_temp = tb.Where(x => x[0] == item).ToList(); // Взяли все строчки по полному совпадению первой ячейки
    project.SendInfoToLog(string.Format("Взяли все строчки по полному совпадению первой ячейки. Нашли строк: {0}",tb_temp.Count));
    if(tb_temp.Count == 0) continue;
   
    var a = tb_temp.Select(x=>int.Parse(x[1])).Sum(); // Подсчитали сумму по второй ячеке
    project.SendInfoToLog(string.Format("Считаем сумму для: {0} Результат: {1}",item, a));
    var b = tb_temp.Select(x=>int.Parse(x[2])).Sum(); // подсчитали сумму по третей ячейке
    project.SendInfoToLog(string.Format("Считаем сумму для: {0} Результат: {1}",item, b));
    var c = tb_temp.Select(x=>int.Parse(x[3])).Sum(); // подсчитали сумму по четвертой ячеке  
    project.SendInfoToLog(string.Format("Считаем сумму для: {0} Результат: {1}",item, c));
    result.Add(new[]{item, a.ToString(), b.ToString(), c.ToString()}); // Записали результат
    project.SendInfoToLog(string.Format("Записали результат для {0}",item));
}

project.SendInfoToLog("Смотрим что получилось");
result.ForEach( x => project.SendInfoToLog(string.Join("|", x)));

// Возвращаем данные в табличку зенно
//project.Tables["tb"].Clear(); // Очистили таблицу
//result.ForEach( x => project.Tables["tb"].AddRow(x)); // записали данные в таблицу зенно
Посмотреть вложение 94561
Посмотреть вложение 94562
Превосходно, буду изучать, спасибо)
 
  • Спасибо
Реакции: djaga

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