2013-09-12 4 views
1

Привет Я использую csvHelper для чтения в CSV-файлах с переменным числом столбцов. Первая строка всегда содержит строку заголовка. Сначала количество столбцов неизвестно, иногда есть три столбца, а иногда - 30+. Количество строк может быть большим. Я могу читать в csv-файле, но как я могу адресовать каждый столбец данных. Мне нужно сделать некоторую базовую статистику по данным (например, min, max, stddev), а затем записать их в формате не csv. Вот мой код до сих пор ...Csvhelper - прочитать/получить один столбец всех строк?

try{ 
    using (var fileReader = File.OpenText(inFile)) 
    using (var csvResult = new CsvHelper.CsvReader(fileReader)) 
    { 
     // read the header line 
     csvResult.Read(); 

     // read the whole file 
     dynamic recs = csvResult.GetRecords<dynamic>().ToList(); 

     /* now how do I get a whole column ??? 
     * recs.getColumn ??? 
     * recs.getColumn['hadername'] ??? 
     */ 

    } 
    catch (Exception ex) 
    { 
     MessageBox.Show("Error: Could not read file from disk. Original error: " + ex.Message); 
    } 

Благодаря

ответ

7

Я не думаю, что библиотека способна делать это непосредственно. Вы должны прочитать свой столбец из отдельных полей и добавить их в List, но процесс обычно выполняется быстро, потому что читатели работают быстро. Например, если ваш нужный столбец имеет тип string, код будет выглядеть примерно так:

List<string> myStringColumn= new List<string>(); 
using (var fileReader = File.OpenText(inFile)) 
    using (var csvResult = new CsvHelper.CsvReader(fileReader)) 
    { 
     while (csvResult.Read()) 
     { 
     string stringField=csvResult.GetField<string>("Header Name"); 
     myStringColumn.Add(stringField);  
     } 
    } 
+0

Ваш фрагмент кода сохраняет только первое значение из всей колонны. Что, если столбец содержит 500 значений? – GordonFreaman

0
using (System.IO.StreamReader file = new System.IO.StreamReader(Server.MapPath(filepath))) 
         { 
          //Csv reader reads the stream 
          CsvReader csvread = new CsvReader(file); 
          while (csvread.Read()) 
          { 
           int count = csvread.FieldHeaders.Count(); 
           if (count == 55) 
           { 
            DataRow dr = myExcelTable.NewRow(); 
            if (csvread.GetField<string>("FirstName") != null) 
            { 
             dr["FirstName"] = csvread.GetField<string>("FirstName"); ; 
            } 
            else 
            { 
             dr["FirstName"] = ""; 
            } 

            if (csvread.GetField<string>("LastName") != null) 
            { 
             dr["LastName"] = csvread.GetField<string>("LastName"); ; 
            } 
            else 
            { 
             dr["LastName"] = ""; 
            } 
           } 
           else 
           { 
            lblMessage.Visible = true; 
            lblMessage.Text = "Columns are not in specified format."; 
            lblMessage.ForeColor = System.Drawing.Color.Red; 
            return; 
           } 
          } 
          } 
Смежные вопросы