Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
5 / 5 / 2
Регистрация: 04.06.2009
Сообщений: 147

Подсчитать количество каждого уникального символа в каждой ячейке и записать в новый столбец

25.03.2016, 23:15. Показов 2610. Ответов 43
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток.
У меня вопрос: как можно подсчитать сумму каждого уникального символа в каждой ячейке для каждого имени и записать в новый столбец?
Вот например, у меня 2 столбца
ID____ ST
1 ____11111
1_____11
1_____33333
2_____22222
2_____221111
А на выходе должно получиться
ID______ST1___ST2____ST3
1 _______7______0______5
2________4______7_____0

У меня получается только

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
var distinctIds = dt.AsEnumerable()
                    .Select(s => new
                    {
                        id = s.Field<string>("ID")
                    })
                    .Distinct().Count().ToString();
dataGridView1.Columns.Add("ST1", "ST2", "ST3");
dataGridView1.DataSource = dSet.Tables[0].DefaultView;
               for (int i = 0; i < dataGridView1.Rows.Count; i++)
 
if (dataGridView1.RowCount == 0)
{
               {
                    dataGridView1.Rows[i].Cells["ST1"].Value = Convert.ToInt32(dataGridView1.Rows[i].Cells["ST"].Value)+distinctIds;
               }
}
Но это совсем не то... Не могу сообразить как подсчитать количество уникальных символов в каждой ячейке...
Помогите пожалуйста.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.03.2016, 23:15
Ответы с готовыми решениями:

Для каждого столбца подсчитать сумму четных положительных элементов и записать данные в новый массив
Дан массив размером n×n, элементы которого целые числа. Для каждого столбца подсчитать сумму четных положительных элементов и записать...

По каждой колонке (кроме а и с) подсчитать % каждого уникального значения
http://garden.gov.ua/failo/proc.xls - некая таблица произвольного размера. Мне нужно по каждой колонке (кроме а и с) пдсчитать % каждого...

Для каждой строки подсчитать количество положительных элементов и записать данные в новый массив
вот программа, готовлюсь к пересдаче экзамена по C#, студия ругается на 2 момента, не могу понять почему ругается сама задача: Для...

43
5 / 5 / 2
Регистрация: 04.06.2009
Сообщений: 147
27.03.2016, 23:26  [ТС]
Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for (int i=0; i<dataGridView1.RowCount; i++)
            {
            rr = dt.NewRow();
        rr[0] = dataGridView1.Rows[i].Cells["ID"].Value.ToString();
            rr[1] = dataGridView1.Rows[i].Cells["ST"].Value.ToString();
            rr[2] = Numbs('1', dataGridView1.Rows[i].Cells["ST"].Value.ToString());
            rr[3] = Numbs('2', dataGridView1.Rows[i].Cells["ST"].Value.ToString());
            rr[4] = Numbs('3', dataGridView1.Rows[i].Cells["ST"].Value.ToString()); 
            dt.Rows.Add(rr);
            }
 
 
            dt.Rows.Add(rr);
            }
Выдает ошибку : Additional information: Object reference not set to an instance of an object.
rr[0] = dataGridView1.Rows[i].Cells["ID"].Value.ToString();

Добавлено через 44 минуты
В любом случае выдает ошибку,
как правильно записать?
0
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
28.03.2016, 09:40
Покажи код установки колонок и строк dataGridView1.
0
5 / 5 / 2
Регистрация: 04.06.2009
Сообщений: 147
28.03.2016, 10:30  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
 private void button3_Click(object sender, EventArgs e)
        {
            dataGridView1.DataSource = dt;
            
            DataColumn c1 = new DataColumn("st_0", System.Type.GetType("System.Int16"));
            DataColumn c2 = new DataColumn("st_1", System.Type.GetType("System.Int16"));
            DataColumn c3 = new DataColumn("st_2", System.Type.GetType("System.Int16"));
            DataColumn c4 = new DataColumn("st_3", System.Type.GetType("System.Int16"));
            DataColumn c5 = new DataColumn("st_4", System.Type.GetType("System.Int16"));
            DataColumn c6 = new DataColumn("st_5", System.Type.GetType("System.Int16"));
            DataColumn c7 = new DataColumn("st_6", System.Type.GetType("System.Int16"));
            DataColumn c8 = new DataColumn("st_7", System.Type.GetType("System.Int16"));
            DataColumn c9 = new DataColumn("st_8", System.Type.GetType("System.Int16"));
            DataColumn c10 = new DataColumn("st_9", System.Type.GetType("System.Int16"));
            DataColumn c11 = new DataColumn("st_A", System.Type.GetType("System.Int16"));
            DataColumn c12 = new DataColumn("st_X", System.Type.GetType("System.Int16"));
            DataColumn c13 = new DataColumn("st_E", System.Type.GetType("System.Int16"));
             
            dt.Columns.AddRange(new DataColumn[]{c1,c2,c3,c4,c5,c6,c7,c8,c9,c10,c11,c12,c13});
            DataRow rr
            
            for (int i=0; i<dataGridView1.RowCount; i++)
            {
            rr = dt.NewRow();
            rr[0] = dataGridView1.Rows[i].Cells["tcs_customer_id"].Value.ToString();
            rr[1] = dataGridView1.Rows[i].Cells["pmt_string_84m"].Value.ToString();
            rr[2] = Numbs('0', dataGridView1.Rows[i].Cells["ST"].Value.ToString());
            rr[3] = Numbs('1', dataGridView1.Rows[i].Cells["ST"].Value.ToString());
            rr[4] = Numbs('2', dataGridView1.Rows[i].Cells["ST"].Value.ToString());
            rr[5] = Numbs('3', dataGridView1.Rows[i].Cells["ST"].Value.ToString());
            rr[6] = Numbs('4', dataGridView1.Rows[i].Cells["ST"].Value.ToString());
            rr[7] = Numbs('5', dataGridView1.Rows[i].Cells["ST"].Value.ToString());
            rr[8] = Numbs('6', dataGridView1.Rows[i].Cells["ST"].Value.ToString());
            rr[9] = Numbs('7', dataGridView1.Rows[i].Cells["ST"].Value.ToString());
            rr[10] = Numbs('8', dataGridView1.Rows[i].Cells["ST"].Value.ToString());
            rr[11] = Numbs('9', dataGridView1.Rows[i].Cells["ST"].Value.ToString());
            rr[12] = Numbs('A', dataGridView1.Rows[i].Cells["ST"].Value.ToString());
            rr[13] = Numbs('X', dataGridView1.Rows[i].Cells["ST"].Value.ToString());
            rr[14] = Numbs('E', dataGridView1.Rows[i].Cells["ST"].Value.ToString());
 
             dt.Rows.Add(rr);
            }
            dataGridView1.DataSource = dt;
            
            var  zz = dt.AsEnumerable()
                .GroupBy (r => r.Field<string>("id") +
                r.Field<string>("open_date") +
                 r.Field<string>("final_date") +
                 r.Field<string>("limit") )
                .Select(t => new {
                    tcs_customer_id = t.Key,
                        open_date = t.Key,
                        final_pmt_date = t.Key,
                        credit_limit = t.Key,
                        currency = t.Key,
                        
                        st1 = t.Sum(x=> x.Field<Int16>("ST_0")),
                        st2 = t.Sum(x=> x.Field<Int16>("ST_0_1")),
                        st3 = t.Sum(x=> x.Field<Int16>("ST_0_2")),
                        st4 = t.Sum(x=> x.Field<Int16>("ST_0_3")),
                        st5 = t.Sum(x=> x.Field<Int16>("ST_0_4")),
                        st6 = t.Sum(x=> x.Field<Int16>("ST_0_5")),
                        st7 = t.Sum(x=> x.Field<Int16>("ST_0_6")),
                        st8 = t.Sum(x=> x.Field<Int16>("ST_0_7")),
                        st9 = t.Sum(x=> x.Field<Int16>("ST_0_8")),
                        st10 = t.Sum(x=> x.Field<Int16>("ST_0_9")),
                        st11 = t.Sum(x=> x.Field<Int16>("ST_0_A")),
                        st12 = t.Sum(x=> x.Field<Int16>("ST_0_X")),
                        st13 = t.Sum(x=> x.Field<Int16>("ST_0_E"))
                    });
            zz.All(w => { rr = dt.NewRow(); rr[0] = w.id; rr[1] = w.open_date; rr[2] = w.final_date; rr[3] = w.limit;
              rr[5] = w.st1;
                rr[6] = w.st2;
            rr[7] = w.st3; rr[8] = w.st4; rr[9] = w.st5; rr[10] = w.st6;
            rr[11] = w.st7; rr[12] = w.st8; rr[13] = w.st9; rr[14] = w.st10;
            rr[15] = w.st11; rr[16] = w.st12; rr[17] = w.st13; 
                dt.Rows.Add(rr); return true; });
            dataGridView2.DataSource = dt;
        }
 
        int Numbs(char un, string st)
        {
            char[] w = st.ToCharArray();
            int k = 0;
            w.All(c => { if (c == un) k++; return true; });
            return k;
        }
"Покажи код установки колонок и строк dataGridView1."" Не поняла вопрос... Я полностью написала обработчик

Добавлено через 31 минуту
Буду вечером...
0
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
28.03.2016, 22:20
Нужен весь код: от считывания файла и его размещения до формирования DataTable, т.к. у тебя ошибки:
1) колонки описываешь, как Int16, а значения переводишь в string ???!!!
2) ты написала, что ошибка вываливается на строчке
C#
1
rr[0] = dataGridView1.Rows[i].Cells["ID"].Value.ToString();
но в указанном коде я не вижу как ты сформировала колонку ID и как заполнила строки.

Поэтому либо показывай код, либо я умываю руки.........
0
5 / 5 / 2
Регистрация: 04.06.2009
Сообщений: 147
28.03.2016, 22:25  [ТС]
Отправляю весь проект вместе с бд
Вложения
Тип файла: rar ReadCsvFile.rar (68.3 Кб, 5 просмотров)
Тип файла: rar Sdvch.rar (6.13 Мб, 4 просмотров)
0
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
29.03.2016, 00:13
Karta, ты взяла мой тест и включила его в свою программку в целом не думая. Это делать нельзя.
Ошибка в том, что ты к dt добавила 13 новых колонок (Int16) и всего колонок стало 41 (до добавления их было 28), далее: в моем тесте формировались строки для новой DataTable, а ты хочешь дополнить уже имеющуюся!!!!!!!, поэтому нужно заносить значения в ячейки текущей строки (никаких добавлений строк):

C#
1
2
3
4
5
6
7
for (int i=0; i<dataGridView1.RowCount; i++)
            {
dt.Rows[i].Cells["st_0"] = Numbs('0', dataGridView1.Rows[i].Cells["ST"].Value.ToString());
.....
//для всех добавленных колонок
dt.Rows[i].Cells["st_E"] = Numbs('E', dataGridView1.Rows[i].Cells["ST"].Value.ToString());
}
Пробуй.

Добавлено через 45 секунд
Поняла.

Добавлено через 19 секунд
Поняла??
0
5 / 5 / 2
Регистрация: 04.06.2009
Сообщений: 147
29.03.2016, 01:30  [ТС]
Спасибо, я поняла, попробую :-)

Добавлено через 21 минуту
Но мне и нужно было, что бы столбцов стало 41! Мне и нужно в существующую таблицу добавить дополнительные колонки, в которых записать вычисления!
C#
1
dt.Rows[i]["st_E"] = Numbs('E', dataGridView1.Rows[i].Cells["pmt_string_84m"].Value.ToString());
И Этот код все равно не работает

Добавлено через 27 минут
А как тогда здесь правильно исправить?
C#
1
2
 zz.All(w => {  rr[0] = w.id; rr[1] = w.st1; rr[2] = w.st2; rr[3] = w.st3; dt.Rows.Add(rr); return true; });
            dataGridView1.DataSource = dt;
0
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
29.03.2016, 07:45
Скажи откровенно, ты понимаешь, что ты написала??
У тебя на форме две DGV. Что ты собираешься вывести во вторую? Ты продолжаешь настаивать, чтобы была одна DataTable?
0
5 / 5 / 2
Регистрация: 04.06.2009
Сообщений: 147
29.03.2016, 10:29  [ТС]
"Скажи откровенно, ты понимаешь, что ты написала??
У тебя на форме две DGV. Что ты собираешься вывести во вторую? Ты продолжаешь настаивать, чтобы была одна DataTable?"

DataGridView2 мне нужно для другого задания. У меня условие, что бы все было в одной таблице.
0
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
29.03.2016, 10:36
Я исправил метод ReadCSV:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
 public DataTable ReadCSV(string filePath)
        {
           
            File.ReadLines(filePath).Take(1)
            .SelectMany(x => x.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries))
            .ToList()
            .ForEach(x => dt.Columns.Add(x.Trim(),Type.GetType("System.String")));
            //добавляем новые колонки
            DataColumn c1 = new DataColumn("pmt_string_84m_0", System.Type.GetType("System.Int16"));
            DataColumn c2 = new DataColumn("pmt_string_84m_1", System.Type.GetType("System.Int16"));
            DataColumn c3 = new DataColumn("pmt_string_84m_2", System.Type.GetType("System.Int16"));
            DataColumn c4 = new DataColumn("pmt_string_84m_3", System.Type.GetType("System.Int16"));
            DataColumn c5 = new DataColumn("pmt_string_84m_4", System.Type.GetType("System.Int16"));
            DataColumn c6 = new DataColumn("pmt_string_84m_5", System.Type.GetType("System.Int16"));
            DataColumn c7 = new DataColumn("pmt_string_84m_6", System.Type.GetType("System.Int16"));
            DataColumn c8 = new DataColumn("pmt_string_84m_7", System.Type.GetType("System.Int16"));
            DataColumn c9 = new DataColumn("pmt_string_84m_8", System.Type.GetType("System.Int16"));
            DataColumn c10 = new DataColumn("pmt_string_84m_9", System.Type.GetType("System.Int16"));
            DataColumn c11 = new DataColumn("pmt_string_84m_A", System.Type.GetType("System.Int16"));
            DataColumn c12 = new DataColumn("pmt_string_84m_X", System.Type.GetType("System.Int16"));
            DataColumn c13 = new DataColumn("pmt_string_84m_E", System.Type.GetType("System.Int16"));
            dt.Columns.AddRange(new DataColumn[] { c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13 });
            //таблица имеет все колонки
            File.ReadLines(filePath).Skip(1)
           .Select(x => x.Split(';'))
           .ToList()
          .ForEach(line => 
          //на проходе формируем значения новых колонок
          { DataRow row = dt.NewRow();
          for (int ii = 0; ii < line.Length; ii++) row[ii] = line[ii];
          int i = line.Length;
          row[i] = Numbs('0', line[22]);  
          row[i + 1] = Numbs('1', line[22]);
          row[i+2] = Numbs('2', line[22]);
          row[i + 3] = Numbs('3', line[22]);
          row[i + 4] = Numbs('4', line[22]);
          row[i + 5] = Numbs('5', line[22]);
          row[i + 6] = Numbs('6', line[22]);
          row[i + 7] = Numbs('7', line[22]);
          row[i + 8] = Numbs('8', line[22]);
          row[i + 9] = Numbs('9', line[22]);
          row[i + 10] = Numbs('A', line[22]);
          row[i + 11] = Numbs('X', line[22]);
          row[i + 12] = Numbs('E', line[22]);
               dt.Rows.Add(row); });
 
                  
           var distinctIds = dt.AsEnumerable()
               .GroupBy(r=>
                   r.Field<string>("tcs_customer_id"))
                    /*.Select(s => new
                    {
                        id = s.Field<string>("tcs_customer_id")
                    })*/
                    .Distinct().Count().ToString();
            textBox3.Text = distinctIds.ToString();
            
            return dt;
       }
Таблица полностью формируется на проходе загрузки файла.

Добавлено через 3 минуты
Теперь скажи, что ты собиралась сделать в коде ниже:

C#
1
2
3
4
5
6
7
var  zz = dt.AsEnumerable()
                .GroupBy (r => r.Field<string>("tcs_customer_id") +
                r.Field<string>("open_date") +
                 r.Field<string>("final_pmt_date") +
                 r.Field<string>("credit_limit") +
                 r.Field<string>("currency"))
........
Сгруппировать по пяти полям?

Добавлено через 35 секунд
Или еще что-то?
0
5 / 5 / 2
Регистрация: 04.06.2009
Сообщений: 147
29.03.2016, 10:40  [ТС]
Но послушайте, у меня еще ко всему этому будет куча разных фильтров, в ходе которых к изначальной таблице будут постоянно добавляться столбцы и к концу у таблицы их будет 66.

Добавлено через 3 минуты
"Сгруппировать по пяти полям? Или еще что-то? "

Конкретно в этом обработчике мне понадобится только эта группировка, в других обработчиках, будут другие фильтры.
0
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
29.03.2016, 10:51
Тогда зачем ты пытаешься все запихнуть в одну DataTable?
Исходный файл - в dt; для расчета 1,2, ....Е - dt1; для отображения в dgv2 - dt3. Если не забывать уничтожать (обнулять) промежуточные таблицы, то не будет никаких проблем.
Кстати таблицы могут быть связанными и входить в DataSet. Я не знаю всей задачи.
Ну что? На чем останавливаемся?
0
5 / 5 / 2
Регистрация: 04.06.2009
Сообщений: 147
29.03.2016, 21:36  [ТС]
Сделала вот так, выводит полную ерунду, не соответствует тому, что должно быть...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
 private void button3_Click(object sender, EventArgs e)
        {
           DataTable dt1 = new DataTable();
           dataGridView1.DataSource = dt1;
           DataColumn c1 = new DataColumn("tcs_customer_id", System.Type.GetType("System.String"));
           DataColumn c6 = new DataColumn("pmt_string_84m", System.Type.GetType("System.String"));
           DataColumn c7 = new DataColumn("pmt_string_84m_0", System.Type.GetType("System.Int16"));
           DataColumn c8 = new DataColumn("pmt_string_84m_1", System.Type.GetType("System.Int16"));
           DataColumn c9 = new DataColumn("pmt_string_84m_2", System.Type.GetType("System.Int16"));
           DataColumn c10 = new DataColumn("pmt_string_84m_3", System.Type.GetType("System.String"));
           DataColumn c11 = new DataColumn("pmt_string_84m_4", System.Type.GetType("System.Int16"));
           DataColumn c12 = new DataColumn("pmt_string_84m_5", System.Type.GetType("System.Int16"));
           DataColumn c13 = new DataColumn("pmt_string_84m_6", System.Type.GetType("System.Int16"));
           DataColumn c14 = new DataColumn("pmt_string_84m_7", System.Type.GetType("System.String"));
           DataColumn c15 = new DataColumn("pmt_string_84m_8", System.Type.GetType("System.Int16"));
           DataColumn c16 = new DataColumn("pmt_string_84m_9", System.Type.GetType("System.Int16"));
           DataColumn c17 = new DataColumn("pmt_string_84m_A", System.Type.GetType("System.Int16"));
           DataColumn c18 = new DataColumn("pmt_string_84m_X", System.Type.GetType("System.Int16"));
           DataColumn c19 = new DataColumn("pmt_string_84m_E", System.Type.GetType("System.Int16"));
 
           dt1.Columns.AddRange(new DataColumn[] { c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15 });
           DataRow rr;
            
            
            //DataRow rr = dt1.NewRow();
           for (int i = 0; i < dt.Rows.Count; i++)
            {
                rr = dt1.NewRow();
                rr[0] = dt.Rows[i]["tcs_customer_id"];
                rr[1] = dt.Rows[i]["pmt_string_84m"];
                rr[2] = Numbs('0', dt.Rows[i]["pmt_string_84m"].ToString());
                rr[3] = Numbs('1', dt.Rows[i]["pmt_string_84m"].ToString());
                rr[4] = Numbs('2', dt.Rows[i]["pmt_string_84m"].ToString());
                rr[5] = Numbs('3', dt.Rows[i]["pmt_string_84m"].ToString());
                rr[6] = Numbs('4', dt.Rows[i]["pmt_string_84m"].ToString());
                rr[7] = Numbs('5', dt.Rows[i]["pmt_string_84m"].ToString());
                rr[8] = Numbs('6', dt.Rows[i]["pmt_string_84m"].ToString());
                rr[9] = Numbs('7', dt.Rows[i]["pmt_string_84m"].ToString());
                rr[10] = Numbs('8', dt.Rows[i]["pmt_string_84m"].ToString());
                rr[11] = Numbs('9', dt.Rows[i]["pmt_string_84m"].ToString());
                rr[12] = Numbs('A', dt.Rows[i]["pmt_string_84m"].ToString());
                rr[13] = Numbs('X', dt.Rows[i]["pmt_string_84m"].ToString());
                rr[14] = Numbs('E', dt.Rows[i]["pmt_string_84m"].ToString());
 
                dt1.Rows.Add(rr);
            }
            dataGridView1.DataSource = dt1;
 
            DataTable dt2 = new DataTable();
            DataColumn c21 = new DataColumn("tcs_customer_id", System.Type.GetType("System.String"));
            DataColumn c22 = new DataColumn("pmt_string_84m_0", System.Type.GetType("System.Int16"));
            DataColumn c23 = new DataColumn("pmt_string_84m_1", System.Type.GetType("System.Int16"));
            DataColumn c24 = new DataColumn("pmt_string_84m_2", System.Type.GetType("System.Int16"));
            DataColumn c25 = new DataColumn("pmt_string_84m_3", System.Type.GetType("System.Int16"));
            DataColumn c26 = new DataColumn("pmt_string_84m_4", System.Type.GetType("System.Int16"));
            DataColumn c27 = new DataColumn("pmt_string_84m_5", System.Type.GetType("System.Int16"));
            DataColumn c28 = new DataColumn("pmt_string_84m_6", System.Type.GetType("System.Int16"));
            DataColumn c29 = new DataColumn("pmt_string_84m_7", System.Type.GetType("System.Int16"));
            DataColumn c210 = new DataColumn("pmt_string_84m_8", System.Type.GetType("System.Int16"));
            DataColumn c211 = new DataColumn("pmt_string_84m_9", System.Type.GetType("System.Int16"));
            DataColumn c212 = new DataColumn("pmt_string_84m_A", System.Type.GetType("System.Int16"));
            DataColumn c213 = new DataColumn("pmt_string_84m_X", System.Type.GetType("System.Int16"));
            DataColumn c214 = new DataColumn("pmt_string_84m_E", System.Type.GetType("System.Int16"));
            dt2.Columns.AddRange(new DataColumn[] { c21, c22, c23, c24, c25, c26, c27,c28,c29, c210, c211, c212, c213, c214 });
            
            var  zz = dt1.AsEnumerable()
                .GroupBy (r => r.Field<string>("tcs_customer_id") +
                r.Field<string>("open_date") +
                 r.Field<string>("final_pmt_date") +
                 r.Field<string>("credit_limit") +
                 r.Field<string>("currency"))
                .Select(t => new {
                    tcs_customer_id = t.Key,
                                               
                        st1 = t.Sum(x=> x.Field<Int16>("pmt_string_84m_0")),
                        st2 = t.Sum(x=> x.Field<Int16>("pmt_string_84m_1")),
                        st3 = t.Sum(x=> x.Field<Int16>("pmt_string_84m_2")),
                        //st4 = t.Sum(x=> x.Field<Int16>("pmt_string_84m_3")),
                        st5 = t.Sum(x=> x.Field<Int16>("pmt_string_84m_4")),
                        st6 = t.Sum(x=> x.Field<Int16>("pmt_string_84m_5")),
                        st7 = t.Sum(x=> x.Field<Int16>("pmt_string_84m_6")),
                        //st8 = t.Sum(x=> x.Field<Int16>("pmt_string_84m_7")),
                        st9 = t.Sum(x=> x.Field<Int16>("pmt_string_84m_8")),
                        //st10 = t.Sum(x=> x.Field<Int16>("pmt_string_84m_9")),
                        //stA = t.Sum(x=> x.Field<Int16>("pmt_string_84m_A")),
                       // stX = t.Sum(x=> x.Field<Int16>("pmt_string_84m_X")),
                       // stE = t.Sum(x => x.Field<Int16>("pmt_string_84m_E"))
                    });
            zz.All(w => {rr = dt2.NewRow(); rr[0]= w.tcs_customer_id; rr[1] = w.st1; rr[2] = w.st2; rr[3] = w.st3;
            //rr[4] = w.st4;
                rr[5] = w.st5; rr[6] = w.st6; rr[7] = w.st7;// rr[8] = w.st8;
                rr[9] = w.st9; // rr[10] = w.st10; 
                // rr[11] = w.stA; rr[12] = w.stX; rr[13] = w.stE; 
                dt2.Rows.Add(rr); return true; });
            
            dataGridView2.DataSource = dt2;
0
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
29.03.2016, 23:38
Объяви dt1 там же где и dt:
C#
1
2
DataTable dt = new DataTable();
        DataTable dt1 = new DataTable();
Вот тебе новый код для третьей кнопки (данные будут выводиться в DGV2):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
private void button3_Click(object sender, EventArgs e)
        {
            dataGridView1.DataSource = dt;
           
            DataRow rr = dt.NewRow();
 
            var z1 = dt.AsEnumerable()
                .GroupBy(r => r.Field<string>("tcs_customer_id") +
                r.Field<string>("open_date") +
                 r.Field<string>("final_pmt_date") +
                 r.Field<string>("credit_limit") +
                 r.Field<string>("currency")
                 )
                 .Select((t) => new
                 {
                    id = t.First().Field<string>("tcs_customer_id"),
                    open_date = t.First().Field<string>("open_date"),
                    final_pmt_date = t.First().Field<string>("final_pmt_date"),
                    credit_limit = t.First().Field<string>("credit_limit"),
                    currency = t.First().Field<string>("currency"),
                    st1 = t.Sum(x => x.Field<Int16>("pmt_string_84m_0")),
                    st2 = t.Sum(x => x.Field<Int16>("pmt_string_84m_1")),
                    st3 = t.Sum(x => x.Field<Int16>("pmt_string_84m_2")),
                    st4 = t.Sum(x => x.Field<Int16>("pmt_string_84m_3")),
                    st5 = t.Sum(x => x.Field<Int16>("pmt_string_84m_4")),
                    st6 = t.Sum(x => x.Field<Int16>("pmt_string_84m_5")),
                    st7 = t.Sum(x => x.Field<Int16>("pmt_string_84m_6")),
                    st8 = t.Sum(x => x.Field<Int16>("pmt_string_84m_7")),
                    st9 = t.Sum(x => x.Field<Int16>("pmt_string_84m_8")),
                    st10 = t.Sum(x => x.Field<Int16>("pmt_string_84m_9")),
                    st11 = t.Sum(x => x.Field<Int16>("pmt_string_84m_A")),
                    st12 = t.Sum(x => x.Field<Int16>("pmt_string_84m_X")),
                    st13 = t.Sum(x => x.Field<Int16>("pmt_string_84m_E"))
                 });
            string[] name = new string[18] 
                {
                "id", "open_date" ,
                    "final_pmt_date",
                    "credit_limit",
                    "currency",
                    "st1" ,
                    "st2",
                    "st3" ,
                    "st4",
                    "st5" ,
                    "st6" ,
                    "st7" ,
                    "st8" ,
                    "st9" ,
                    "st10",
                    "st11" ,
                    "st12" ,
                    "st13" 
                };
            foreach (string s in name) dt1.Columns.Add(s);
            
            
            z1.All(w => { rr = dt1.NewRow(); rr[0] = w.id; rr[1] = w.open_date; rr[2] = w.final_pmt_date; rr[3] = w.credit_limit;
            rr[4] = w.currency;  rr[5] = w.st1;
                rr[6] = w.st2;
            rr[7] = w.st3; rr[8] = w.st4; rr[9] = w.st5; rr[10] = w.st6;
            rr[11] = w.st7; rr[12] = w.st8; rr[13] = w.st9; rr[14] = w.st10;
            rr[15] = w.st11; rr[16] = w.st12; rr[17] = w.st13; 
                dt1.Rows.Add(rr); return true; });
            dataGridView2.DataSource = dt1;
            
        }
А дальше фантазируй.
0
5 / 5 / 2
Регистрация: 04.06.2009
Сообщений: 147
30.03.2016, 00:04  [ТС]
Спасибо, но у меня ошибку выдает...
Additional information: Column 'pmt_string_84m_0' does not belong to table .

Добавлено через 5 минут
А что значит "А дальше фантазируй"?
0
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
30.03.2016, 08:56
У меня все работает с полным файлом. Ошибка говорит, что такого столбца нет. Проверь написание при создании столбца и в этом методе. Кстати, ты код взяла с форума или сама переписала??
Если ошибку не устранишь, то выстави весь проект здесь - я посмотрю.

"А дальше фантазируй" значит, что работай дальше над программой и собой.
0
5 / 5 / 2
Регистрация: 04.06.2009
Сообщений: 147
30.03.2016, 23:14  [ТС]
1.При нажатии кнопки "3" у меня сбрасываются все фильтры у таблицы dt.
2. В таблице dt1 у меня выводятся какие то подсчеты, но они не правильные, например: 0-0, 1-7,...
А должно быть: 0-0, 1-81,... Что считается не понятно, то есть понятно что он считает для каждой строки количество знаков, но у меня то задание другое...
Вот как считает эта программа:
Id_____ST_____ST0___ST1 А как нужно: Id_____ST0___ST1
1_____11111___0_____5_________________1_ _____5_____9
1_____1110____1_____3 ________________ 2______2_____6
1_____10000___4_____1
2_____10011___2_____3
2_____111_____0_____3
Моя задача состоит в том, что бы уменьшить число строк и увеличить число столбцов, а этого не происходит...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
public Form1()
        {
            InitializeComponent();
 
        }
        DataTable dt = new DataTable();
        DataTable dt1 = new DataTable();
        /// <summary>
        /// Load CSV file into DataTable
        /// </summary>
        public DataTable ReadCSV(string filePath)
        {
            File.ReadLines(filePath).Take(1)
          .SelectMany(x => x.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries))
          .ToList()
          .ForEach(x => dt.Columns.Add(x.Trim(), Type.GetType("System.String")));
            //добавляем новые колонки
            DataColumn c1 = new DataColumn("pmt_string_84m_0", System.Type.GetType("System.Int16"));
            DataColumn c2 = new DataColumn("pmt_string_84m_1", System.Type.GetType("System.Int16"));
            DataColumn c3 = new DataColumn("pmt_string_84m_2", System.Type.GetType("System.Int16"));
            DataColumn c4 = new DataColumn("pmt_string_84m_3", System.Type.GetType("System.Int16"));
            DataColumn c5 = new DataColumn("pmt_string_84m_4", System.Type.GetType("System.Int16"));
            DataColumn c6 = new DataColumn("pmt_string_84m_5", System.Type.GetType("System.Int16"));
            DataColumn c7 = new DataColumn("pmt_string_84m_6", System.Type.GetType("System.Int16"));
            DataColumn c8 = new DataColumn("pmt_string_84m_7", System.Type.GetType("System.Int16"));
            DataColumn c9 = new DataColumn("pmt_string_84m_8", System.Type.GetType("System.Int16"));
            DataColumn c10 = new DataColumn("pmt_string_84m_9", System.Type.GetType("System.Int16"));
            DataColumn c11 = new DataColumn("pmt_string_84m_A", System.Type.GetType("System.Int16"));
            DataColumn c12 = new DataColumn("pmt_string_84m_X", System.Type.GetType("System.Int16"));
            DataColumn c13 = new DataColumn("pmt_string_84m_E", System.Type.GetType("System.Int16"));
            dt.Columns.AddRange(new DataColumn[] { c1, c2, c3, c4, c5, c6, c7, c8, c9, c10, c11, c12, c13 });
            //таблица имеет все колонки
            File.ReadLines(filePath).Skip(1)
           .Select(x => x.Split(';'))
           .ToList()
          .ForEach(line =>
          //на проходе формируем значения новых колонок
          {
              DataRow rr = dt.NewRow();
              for (int ii = 0; ii < line.Length; ii++) rr[ii] = line[ii];
              int i = line.Length;
              rr[i] = Numbs('0', line[22]);
              rr[i + 1] = Numbs('1', line[22]);
              rr[i + 2] = Numbs('2', line[22]);
              rr[i + 3] = Numbs('3', line[22]);
              rr[i + 4] = Numbs('4', line[22]);
              rr[i + 5] = Numbs('5', line[22]);
              rr[i + 6] = Numbs('6', line[22]);
              rr[i + 7] = Numbs('7', line[22]);
              rr[i + 8] = Numbs('8', line[22]);
              rr[i + 9] = Numbs('9', line[22]);
              rr[i + 10] = Numbs('A', line[22]);
              rr[i + 11] = Numbs('X', line[22]);
              rr[i + 12] = Numbs('E', line[22]);
              dt.Rows.Add(rr);
          });
 
 
            var distinctIds = dt.AsEnumerable()
                .GroupBy(r =>
                    r.Field<string>("tcs_customer_id"))
                /*.Select(s => new
                {
                    id = s.Field<string>("tcs_customer_id")
                })*/
                     .Distinct().Count().ToString();
            textBox3.Text = distinctIds.ToString();
 
            return dt;
        }
private void button3_Click(object sender, EventArgs e)
        {
            dataGridView1.DataSource = dt;
           
            DataRow rr = dt.NewRow();
 
            var z1 = dt.AsEnumerable()
                .GroupBy(r => r.Field<string>("tcs_customer_id") +
                r.Field<string>("open_date") +
                 r.Field<string>("final_pmt_date") +
                 r.Field<string>("credit_limit") +
                 r.Field<string>("currency")
                 )
                 .Select((t) => new
                 {
                    id = t.First().Field<string>("tcs_customer_id"),
                    open_date = t.First().Field<string>("open_date"),
                    final_pmt_date = t.First().Field<string>("final_pmt_date"),
                    credit_limit = t.First().Field<string>("credit_limit"),
                    currency = t.First().Field<string>("currency"),
                    pmt_string_84m = t.First().Field<string>("pmt_string_84m"),
                    st1 = t.Sum(x => x.Field<Int16>("pmt_string_84m_0")),
                    st2 = t.Sum(x => x.Field<Int16>("pmt_string_84m_1")),
                    st3 = t.Sum(x => x.Field<Int16>("pmt_string_84m_2")),
                    st4 = t.Sum(x => x.Field<Int16>("pmt_string_84m_3")),
                    st5 = t.Sum(x => x.Field<Int16>("pmt_string_84m_4")),
                    st6 = t.Sum(x => x.Field<Int16>("pmt_string_84m_5")),
                    st7 = t.Sum(x => x.Field<Int16>("pmt_string_84m_6")),
                    st8 = t.Sum(x => x.Field<Int16>("pmt_string_84m_7")),
                    st9 = t.Sum(x => x.Field<Int16>("pmt_string_84m_8")),
                    st10 = t.Sum(x => x.Field<Int16>("pmt_string_84m_9")),
                    st11 = t.Sum(x => x.Field<Int16>("pmt_string_84m_A")),
                    st12 = t.Sum(x => x.Field<Int16>("pmt_string_84m_X")),
                    st13 = t.Sum(x => x.Field<Int16>("pmt_string_84m_E"))
                 });
            string[] name = new string[19] 
                {
                "id", "open_date" ,
                    "final_pmt_date",
                    "credit_limit",
                    "currency",
                    "pmt_string_84m" ,
                    "st1" ,
                    "st2",
                    "st3" ,
                    "st4",
                    "st5" ,
                    "st6" ,
                    "st7" ,
                    "st8" ,
                    "st9" ,
                    "st10",
                    "st11" ,
                    "st12" ,
                    "st13" 
                };
            foreach (string s in name) dt1.Columns.Add(s);
            
            
            z1.All(w => { rr = dt1.NewRow(); rr[0] = w.id; rr[1] = w.open_date; rr[2] = w.final_pmt_date; rr[3] = w.credit_limit;
            rr[4] = w.currency; rr[5] = w.pmt_string_84m; 
                rr[6] = w.st1; rr[7] = w.st2;
            rr[8] = w.st3; rr[9] = w.st4; rr[10] = w.st5; rr[11] = w.st6;
            rr[12] = w.st7; rr[13] = w.st8; rr[14] = w.st9; rr[15] = w.st10;
            rr[16] = w.st11; rr[17] = w.st12; rr[18] = w.st13; 
                dt1.Rows.Add(rr); return true; });
            dataGridView2.DataSource = dt1;
            
        }
       int Numbs(char un, string st)
       {
           char[] w = st.ToCharArray();
           int k = 0;
           w.All(c => { if (c == un) k++; return true; });
           return k;
       }
0
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
30.03.2016, 23:45
По кнопке 3 dt не трогается. она выступает исходным материалом для подсчетов: сначала данные группируются по 5-ти полям, затем формируются новые строки с подсчетом Сумм, а затем эти строки вливаются в dt1(обрати внимание dt1), которая становится ресурсом dataGridView2.
Если ьебе нужно что-то другое - действуй.
0
5 / 5 / 2
Регистрация: 04.06.2009
Сообщений: 147
30.03.2016, 23:45  [ТС]
Я вот что подумала, может вот здесь:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
var z1 = dt.AsEnumerable()
                .GroupBy(r => r.Field<string>("tcs_customer_id")+
                r.Field<string>("open_date") +
                 r.Field<string>("final_pmt_date") +
                 r.Field<string>("credit_limit") +
                 r.Field<string>("currency")
                 )
                 .Select((t) => new
                 {
                   id = t.First().Field<string>("tcs_customer_id"),
                    open_date = t.First().Field<string>("open_date"),
                    final_pmt_date = t.First().Field<string>("final_pmt_date"),
                    credit_limit = t.First().Field<string>("credit_limit"),
                    currency = t.First().Field<string>("currency"),
                    pmt_string_84m = t.First().Field<string>("pmt_string_84m"),
                    st1 = t.Sum(x => x.Field<Int16>("pmt_string_84m_0")),
                    st2 = t.Sum(x => x.Field<Int16>("pmt_string_84m_1")),
                    st3 = t.Sum(x => x.Field<Int16>("pmt_string_84m_2")),
                    st4 = t.Sum(x => x.Field<Int16>("pmt_string_84m_3")),
                    st5 = t.Sum(x => x.Field<Int16>("pmt_string_84m_4")),
                    st6 = t.Sum(x => x.Field<Int16>("pmt_string_84m_5")),
                    st7 = t.Sum(x => x.Field<Int16>("pmt_string_84m_6")),
                    st8 = t.Sum(x => x.Field<Int16>("pmt_string_84m_7")),
                    st9 = t.Sum(x => x.Field<Int16>("pmt_string_84m_8")),
                    st10 = t.Sum(x => x.Field<Int16>("pmt_string_84m_9")),
                    st11 = t.Sum(x => x.Field<Int16>("pmt_string_84m_A")),
                    st12 = t.Sum(x => x.Field<Int16>("pmt_string_84m_X")),
                    st13 = t.Sum(x => x.Field<Int16>("pmt_string_84m_E"))
                 });
Дополнительная группировка не нужна, просто из УЖЕ отфильтрованной таблицы dt считать сумму одинаковых элементов для каждого уникального ID ?
"затем формируются новые строки с подсчетом Сумм" Дак в том то и дело, что сумма не считается.... Считается что то другое...
0
160 / 148 / 92
Регистрация: 30.03.2011
Сообщений: 569
30.03.2016, 23:57
Суммы все считаются, но в группировках по 5-ти полям. Сгруппируй по id и будет одна строка на id.

Добавлено через 3 минуты
Ну как?

Добавлено через 1 минуту
закомментируй 3-6 строки и запускай. Давай побыстрее - мне нужно отключаться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.03.2016, 23:57

Для каждой строки подсчитать количество элементов, больших заданного числа и записать данные в новый массив
Для каждой строки подсчитать количество элементов, больших заданного числа и записать данные в новый массив

Для каждой строки подсчитать количество элементов, больших заданного числа, и записать данные в новый массив
Доброго времени суток, ув. Форумчане! Вынужден просить Вашей помощи в решении нескольких задач, т.к. сам на данный момент не разберусь...

Подсчитать количество каждого символа в слове
Надо подсчитать кол-во каждого символа в заданном слове. Пример: &quot;мама м=2 а=2&quot; Проблема моего решения в том, что вывод...

Подсчитать количество вхождений каждого символа в файл
надо подсчитать количество каждого символа в файле #include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;string.h&gt; #include...

Подсчитать количество появлений каждого символа в файле
Написать программу, которая считывает текстовый файл и подсчитывает число появлений в нем каждого символа и знаков препинания и создаёт...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
SUNO Ai - Река Без Дна
zorxor 31.07.2026
Автор стихотворения - астрофизик Марина Катыс Ссылка на сгенерированную музыкальную композицию: https:/ / suno. com/ song/ 6f6e5464-b290-4650-be6c-44c85f8d8013 Я говорю, что Время- как вода течет. . .
Из невошедшего на форум (диалог с ИИ-гугла)
zorxor 29.07.2026
А вот, что интересно, сказал мне ИИ-гугла: Этот текст — эмоциональный пост пользователя под ником zorxor на интернет-форуме (вероятно, посвященном мистике, непознанному или альтернативной науке). . . .
Был праздник вчера, а я и не знал.
kumehtar 28.07.2026
27. 07. 2026г. Intel Core 2 Duo исполнилось 20 лет Салют, шампанское, овации! :drink:
Нейтральные знания, чистый код - бла-бла-бла-бла, на самом деле кликбейт и самореклама, плагиат, и вот почему
Hrethgir 27.07.2026
То-есть отклонение такой публикации говорит само за себя, и пусть только возьмут на вооружение после отклонения публикации - это будет чистейшим актом плагиата. Отклонял Хабр. Дословно, отклонённая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru