使用CSV解析器,我尝试从CSV中选择多个项目。但是,它不会让我选择两个以上

时间:2017-01-12 14:35:51

标签: c# csv parsing

就像我说的,我正在使用CSV解析器,可以在这里找到。The CSV Parser

我能够使用此

成功运行代码
        using (var stream = File.OpenRead(fileSaveLocation))
        using (var reader = new StreamReader(stream))
        {
            var data = CsvParser.ParseHeadAndTail(reader, ',', '"');

            var header2 = data.Item1;
            var lines = data.Item2;

            foreach (var line in lines.Take(5))
            {
                for (var i = 0; i < header2.Count; i++)
                    if (!string.IsNullOrEmpty(line[i]))
                    {
                        sb.Append(header2[i] + "=" + line[i]);
                        sb.Append(Environment.NewLine);
                    }
            }
        }

但我希望能够选择约10项。因此,如果我尝试添加一个新的变量,如:

var test = data.Item3;

它无效。

当我尝试运行它时,它会告诉我:

  

错误1'System.Tuple,System.Collections.Generic.IEnumerable&gt;&gt;'   不包含'Item3'的定义,也没有扩展方法   'Item3'接受第一个类型的参数   'System.Tuple,System.Collections.Generic.IEnumerable&GT;&GT;'   可以找到(你错过了使用指令或程序集   引用?)C:\ repo \ Scriptalizer \ default.aspx.cs 82 37 Scriptalizer(1)

在我尝试运行程序之前会抛出错误。它说它无法解决Item3。我怎样才能让它放入我想要的尽可能多的列?

另外,有没有办法动态选择项目?假设用户可以输入“忽略前3行”,例如,如何声明这些并获取正确的列?

2 个答案:

答案 0 :(得分:0)

Haven特别使用了这个CSV解析库,但听起来你需要以下内容:

using (var stream = File.OpenRead(fileSaveLocation))
{
    using (var reader = new StreamReader(stream))
    {
        // Get the header and rows as a two-item tuple
        var data = CsvParser.ParseHeadAndTail(reader, ',', '"');

        // Get header and and rows into separate variables
        var header2 = data.Item1;
        var lines = data.Item2;

        // This is where you get the rows you want
        // So in this example, we'll skip the first
        // 3 lines and then get the next 10 lines
        var filteredLines = lines.Skip(3).Take(10);

        // Iterate through the lines and do whatever you need to do
        foreach (var line in filteredLines)
        {
            for (var i = 0; i < header2.Count; i++)
            {
                if (!string.IsNullOrEmpty(line[i]))
                {
                    sb.Append(header2[i] + "=" + line[i]);
                    sb.Append(Environment.NewLine);
                }
            }
        }
    }
}

答案 1 :(得分:0)

这是我最终做的工作。

        using (var stream = File.OpenRead(fileSaveLocation))
        using (var reader = new StreamReader(stream))
        {
            var data = CsvParser.ParseHeadAndTail(reader, ',', '"');

            var header2 = data.Item1;
            var lines = data.Item2;


            for (int i = 4; i < header2.Count; i++)
                sb.Append(("\"" + header2[i] + "\"" + ","));

            sb.Append(sb.ToString().TrimEnd(','));
            sb.Append(Environment.NewLine);



            foreach (var line in lines)
            {
                for (var i = 4; i < header2.Count; i++)
                {
                        sb.Append("\"" + line[i] + "\"");
                    if (i != header2.Count - 1)
                    {
                        sb.Append(",");
                    }
                }

                sb.Append(Environment.NewLine);
            }
        }