.net Core 1中的TextFieldParser替换

时间:2016-07-29 02:28:52

标签: c# asp.net-core-mvc

过去对于c#.net mvc项目,我使用了Visual Basic Reference中的TextFieldParser。现在使用.Net Core 1,似乎不再是一个选项。至少我无法弄清楚如何添加可视化基本参考,我想如果你做了它不会这样做,所以它不是跨平台?

TextFieldParser很棒,因为它非常灵活地涵盖了我所有的csv导入需求。

我缺少.netCore中TextFieldParser的替代品吗?或者有没有办法在不破坏跨平台兼容性的情况下使用当前的textfieldparser?

4 个答案:

答案 0 :(得分:2)

.net core 3添加了该支持

答案 1 :(得分:1)

我刚试过CsvHelper - 一个用于readingwriting个CSV文件的.NET库。它涵盖了所有需求。看起来快速,灵活,easy to use。支持custom class objects的阅读和写作。它适用于.NET Core(因为它支持.NET Standard 2.0)以及.NET Framework 4.5查看NuGet page的依赖项。

答案 2 :(得分:1)

对于需要它的用户,TextFieldParser可以处理的不仅仅是CSV。它支持制表符分隔,固定宽度的字段等。

我为.NET Core创建了TextFieldParser的一对一端口。

您可以通过搜索TextFieldParserCore通过nuget获得它。 https://www.nuget.org/packages/TextFieldParserCore/1.0.0

答案 3 :(得分:-1)

解析CSV字符串或文件是一项非常简单的任务。循环浏览所有行,并在分隔符处String.Split。是否使用图书馆为您做到这一点,完全取决于您。

这是我想到的一个非常灵活的TextReader扩展方法:

using System;
using System.Collections.Generic;
using System.IO;

namespace Extensions
{
    /// <summary>Extension method to parse any character separated string OR file.</summary>
    /// <param name="mapFunction">Expression to map data to the desired format</param>
    /// <param name="separator">The character delimiting columns</param>
    /// <param name="skipLines">Amount of heading lines to skip</param>
    public static class TextReaderExtensions
    {
        public static IEnumerable<T> ParseCsvData<T>(this TextReader reader, Func<string[], T> mapFunction, char separator = ',', short skipLines = 1)
        {
            IEnumerable<string[]> readCsvLines()
            {
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    if (!string.IsNullOrEmpty(line) && skipLines-- < 1)
                    {
                        yield return line.Split(separator);
                    }
                }
            }

            foreach (var csvLine in readCsvLines())
            {
                yield return mapFunction.Invoke(csvLine) ?? default;
            }
        }
    }
}

来自字符串输入的用法示例:

using (var textReader = new StringReader("Comma,Separated,Value,String"))
{
    var persons = textReader.ParseCsvData(columns => new Person
    {
        Id = columns[0],
        Name = columns[1],
        Age = columns[2]
    });

    return persons.ToList();
}

文件流输入中的用法示例:

using (var textReader = new StreamReader(fileStream))
{
    var formattedStrings = textReader.ParseCsvData(data => data[1] + " is " + data[2] + " years old.");
    return formattedStrings.ToList();
}

可能性是无限的。

做任何你想做的事...

给人民供电!!