Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用CSV解析器,我试图从CSV中选择多个项目。然而,它不会让我选择两个以上_C#_Csv_Parsing - Fatal编程技术网

C# 使用CSV解析器,我试图从CSV中选择多个项目。然而,它不会让我选择两个以上

C# 使用CSV解析器,我试图从CSV中选择多个项目。然而,它不会让我选择两个以上,c#,csv,parsing,C#,Csv,Parsing,正如我所说,我使用的是CSV解析器,可以在这里找到 我能够使用此命令成功运行代码 using (var stream = File.OpenRead(fileSaveLocation)) using (var reader = new StreamReader(stream)) { var data = CsvParser.ParseHeadAndTail(reader, ',', '"'); va

正如我所说,我使用的是CSV解析器,可以在这里找到

我能够使用此命令成功运行代码

        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);
                    }
            }
        }
这行不通

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

错误1“System.Tuple,System.Collections.Generic.IEnumerable>>” 不包含“Item3”的定义且没有扩展方法 “Item3”接受类型为的第一个参数 'System.Tuple,System.Collections.Generic.IEnumerable>>' 无法找到您是否缺少using指令或程序集 参考C:\repo\Scriptalizer\default.aspx.cs 82 37 Scriptalizer1

在我尝试运行程序之前,它会抛出一个错误。它说它无法解决第3项。我如何才能让它让我放尽可能多的列,我想


另外,是否有一种方法可以动态选择项目?假设用户可以输入忽略前3行,例如,我如何声明它们并获得正确的列

没有特别使用此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);
                }
            }
        }
    }
}

这就是我最后所做的工作,它起了作用

        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);
            }
        }

filteredLines似乎不跳过列,而是跳过行。所以本质上,3,10告诉它从第3行开始,直到第10行,而不是整个文档。当更改for循环的“我开始”位置时,它似乎会跳过行。您是在尝试跳过行还是跳过列?跳过列,尽管使用了您的示例,我还是找到了答案!非常感谢。
        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);
            }
        }