过去对于c#.net mvc项目,我使用了Visual Basic Reference中的TextFieldParser。现在使用.Net Core 1,似乎不再是一个选项。至少我无法弄清楚如何添加可视化基本参考,我想如果你做了它不会这样做,所以它不是跨平台?
TextFieldParser很棒,因为它非常灵活地涵盖了我所有的csv导入需求。
我缺少.netCore中TextFieldParser的替代品吗?或者有没有办法在不破坏跨平台兼容性的情况下使用当前的textfieldparser?
答案 0 :(得分:2)
.net core 3添加了该支持
答案 1 :(得分:1)
我刚试过CsvHelper - 一个用于reading和writing个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();
}
可能性是无限的。
做任何你想做的事...
给人民供电!!