1

私は c# クラスの紹介をしていますが、私たちのリソースは最悪です。

私は既に StreamReader を使用して csv ファイルを入力しています。私がやりたいことは、特定の特性の情報を分析することです。私を混乱させるのは、各行からデータの特定の部分を選択するようにプログラムに知らせる方法です。最大の数を選びたいとしましょう

たとえば、1行が次の場合:

2003 年 4 月 12 日、334、367、289

ここにそうするステートメントを追加しますか?:

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

前もって感謝します。

4

2 に答える 2

0

正規表現を使用してグループをキャプチャすることは、おそらくあなたが探しているものです。

このようなもの:

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 要素のコレクションに含まれるようになりました。これは単なる例ですが、正しい正規表現文字列を作成することは、それ自体がタスクです。

于 2013-04-08T17:34:55.330 に答える
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();
}
于 2013-04-08T18:15:46.010 に答える