读取CSV并制作包含特定值的列表

时间:2012-11-09 12:54:23

标签: c# list csv

我是C#的新手,我一直在努力了解如何从CSV文件中读取特定值。我的文件格式如下

08/11/2012 01:00:00,28/11/2012 01:00:00,29/11/2012 01:00:00,88,
08/11/2012 01:00:00,29/11/2012 01:00:00,30/11/2012 01:00:00,88,
08/11/2012 01:00:00,30/11/2012 01:00:00,01/12/2012 01:00:00,88,
08/11/2012 01:00:00,01/12/2012 01:00:00,02/12/2012 01:00:00,90.25,
08/11/2012 01:00:00,02/12/2012 01:00:00,03/12/2012 01:00:00,90.25,

我想阅读并将列表保存为字符串的最后一个值(即88 90.25等)。我尝试了迄今为止我在这个论坛找到的所有内容,但它不适用于我的情况。

我想这样做,因为我想将此列表与另一个字符串列表进行比较,该列表从XML文件中获取此值,该文件是从我运行的另一个模型生成的。非常感谢你的帮助!

**此csv文件包含大约55000行以上格式。

3 个答案:

答案 0 :(得分:4)

var values = File.ReadAllLines("").Select(x => x.Split(new char[] { ',' })[3]);

小编辑 - 拼写错误。使用此示例进行测试:

  List<string> lines = new List<string>();
  lines.Add("08/11/2012 01:00:00,28/11/2012 01:00:00,29/11/2012 01:00:00,88,");
  lines.Add("08/11/2012 01:00:00,29/11/2012 01:00:00,30/11/2012 01:00:00,88,");
  var values = lines.Select(x => x.Split(new char[] { ',' })[3]);

在列表中检索88,88。

答案 1 :(得分:0)

如果您的价值观是这样的,请不要包含&#34;,&#34;在它的价值观内:

TextReader tr1 = new StreamReader(CSVFileName, true);

var Data = tr1.ReadToEnd().Split('\n')
    .Where(l => l.Length > 0)  //nonempty strings
    .Skip(1)               // skip header if it has one
    .Select(s => s.Trim())   // delete whitespace
    .Select(l => l.Split(',')) // get arrays of values
    .Select(l => new { Date_1 = l[0], 
                       Date_2 = l[1], 
                       Date_3 = l[2], 
                       Val = l[3] });

然后您可以将此对象与foreach或您喜欢的任何内容一起使用。

答案 2 :(得分:0)

double[] numbers = fileText.Split('\n').Select(x => double.Parse(x.Split(',')[3])).ToArray();
string numbersJoined = string.Join(" ", numbers);