2013-04-08 2 views
1

Я вхожу в класс C#, и наши ресурсы сосут.Анализ данных C#

Я уже ввел файл csv с помощью StreamReader, что я хочу сделать, это проанализировать информацию для определенного признака. что меня смущает, как я могу сообщить своей программе, чтобы выбрать определенные части данных из каждой строки? позволяет сказать, что я хочу, чтобы выбрать самое большое число

, например, если одна строка:

2003-04-12, 334, 367, 289

бы я добавить в заявление сделать это здесь? :

input = reader.ReadLine(); 
while (input != null) 
{ 
    ... 
    input = reader.ReadLine(); //next row 
} 
reader.Close(); 

благодарит заранее.

+0

ли вы _want_ сделать сравнение для каждой строки в файле при чтении (который медленный), или вы можете выгрузить весь файл _and then_ parse, который ищет шаблон, который вы указали выше? Всегда ли данные соответствуют шаблону, который вы нам дали? – Brian

+0

эй, брайан, я хотел бы сделать сравнение для каждой строки, каждая строка имеет тот же формат данных с разными номерами. первая - дата – user2258629

+0

Если это следует именно за шаблоном, я бы использовал [Регулярное выражение] (http://msdn.microsoft.com/en-us/library/system.text.regularexpressions.regex.aspx), чтобы сделать работа. – Brian

ответ

0

Using Regex to capture groups, вероятно, то, что вы ищете.

Что-то вроде этого:

var lineRegex = new Regex(@"(?<year>[0-9]+)\-(?<month>[0-9]+)\-(?<day>[0-9]+), (?<first>[0-9]+), (?<second>[0-9]+), (?<third>[0-9]+)"); 
// ... 
var matches = lineRegex.Matches(input); 

Ваших результатов теперь в коллекции спичек элемента. Это просто пример, но создание правильной строки Regex - это задача, которая сама по себе.

0

Проще всего сделать это) разбить строку на части и б) разобрать части в числах безопасно, используя .TryParse()

static void Main(string[] args) 
{ 
    var reader=System.IO.File.OpenText("Data.csv"); 
    List<double[]> data=new List<double[]>(); 
    var line=reader.ReadLine(); 
    double max=0; 
    while(!reader.EndOfStream) 
    { 
     line=reader.ReadLine(); 
     string[] parts=line.Split(','); 
     //parse first part as date 
     DateTime date=DateTime.Parse(parts[0]); 
     //parse rest of parts as float/doulbe/decimal 
     double[] values=new double[parts.Length-1]; 
     for(int i=0; i<values.Length; i++) 
     { 
      //for each value in row convert string to number safely. 
      double x = 0; 
      double.TryParse(parts[i+1], out x); 
      values[i]=x; 
     } 
     //keep data values in list 
     data.Add(values); 
     //keep highest from 1st column 
     if(values[0]>max) { max=values[0]; } 
    } 
    reader.Close(); 
} 
+0

Кстати, если вам нужна более высокая скорость, попробуйте метод 'System.IO.File.ReadAllLines()'. – ja72

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