分析数据c#

时间:2013-04-08 17:27:40

标签: c#

我正在介绍c#类,我们的资源非常糟糕。

我已经使用StreamReader输入了一个csv文件,我想要做的是分析某个特征的信息。令我困惑的是,如何让我的程序知道从每一行中选择数据的某些部分?我想说我想选择最大的数字

例如,如果一行是:

2003-04-12,334,367,289

我会在声明中添加这样做吗?:

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

提前感谢。

2 个答案:

答案 0 :(得分: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);

您的结果现在位于matches元素的集合中。这只是一个例子,创建正确的Regex字符串本身就是一项任务。

答案 1 :(得分:0)

最简单的方法是a)将线分成几部分,然后b)使用.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();
}