2017-01-23 3 views
0

Я пишу это программное обеспечение, которое читает CSV-файл и помещает его в datagridview. Здесь вы можете увидеть картину применения:Средние значения строк с таким же временем в datagridview

enter image description here

Я достижения этой цели с помощью следующего кода, во-первых:

private string[,] LoadCsv(string filename) 
     {   
      string whole_file = System.IO.File.ReadAllText(filename); 


      whole_file = whole_file.Replace('\n', '\r'); 
      string[] lines = whole_file.Split(new char[] { '\r' }, 
       StringSplitOptions.RemoveEmptyEntries); 


      int num_rows = lines.Length; 
      int num_cols = lines[0].Split(';').Length; 


      string[,] values = new string[num_rows, num_cols]; 


      for (int r = 0; r < num_rows; r++) 
      { 
       string[] line_r = lines[r].Split(';'); 
       for (int c = 0; c < num_cols; c++) 
       { 
        values[r, c] = line_r[c]; 
       } 
      }   
      return values; 
     } 

, а затем это:

private void btnGo_Click(object sender, EventArgs e) 
     { 

      string[,] values = LoadCsv(txtFile.Text); 
      int num_rows = values.GetUpperBound(0) + 1; 
      int num_cols = values.GetUpperBound(1) + 1; 

      dgv.Columns.Clear(); 
      for (int c = 0; c < num_cols; c++) 
       dgv.Columns.Add(values[0, c], values[0, c]); 


      for (int r = 1; r < num_rows; r++) 
      { 
       dgv.Rows.Add(); 
       for (int c = 0; c < num_cols; c++) 
       { 
        dgv.Rows[r - 1].Cells[c].Value = values[r, c]; 
       } 
      } 
     } 

Что Я спрашиваю сейчас, есть ли возможность усреднять значения поминутно внутри datagridview или с другим интервалом o f (требуется небольшой интервал от 1 до 5 минут).

Благодарим за помощь!

+1

Звучит как работа для LINQ .GroupBy() и .Aggregate(). – Oliver

+1

Поскольку 'DataGridView' НЕ привязан к какой-либо' DataTable', вам придется перебирать строки, собирать те же даты и усреднять значения vales и отображать эту информацию где-то. Это делает для вас много работы. Если вы помещаете данные в «DataTable», то вы можете использовать LINQ как предложение @Oliver. Использование этого подхода сделает получение средних значений, имеющих одну и ту же дату, намного проще, поскольку это то, что LINQ делает очень хорошо, и делает этот тип «запроса» намного проще и открывает другие методы поиска/сбора, с которыми вы можете столкнуться в будущее. Просто мысль. – JohnG

+0

Спасибо, Оливер и Джон, я займусь тем маршрутом, который ты указал мне, который кажется лучшим. –

ответ

0

Если я понял вас правильно, вы хотите прочитать csv каждые x минут снова? Может быть, вы можете использовать таймер, как этот

таймер вар = новый System.Threading.Timer ((е) => { LoadCsv (строка файла) }, NULL, 0, TimeSpan.FromMinutes (5). TotalMilliseconds);

+0

Нет, я хочу усреднить значения, когда они имеют одинаковое время и дату в представлении datagridview –

Смежные вопросы