分割CSV文件与头c#

本文关键字:文件 CSV 分割 | 更新日期: 2023-09-27 18:09:21

我需要按源字段拆分大型CSV文件,并将导出文件的名称命名为源字段。

我的代码工作,但唯一不工作的是,我需要分割文件有头行从原始文件。

任何帮助都是感激的。谢谢你!

var splitQuery = from line in File.ReadLines(@"C:'test'test1.csv")
            let source = line.Split(',').Last()
            group line by source into outputs
            select outputs;
foreach (var output in splitQuery)
{
    File.WriteAllLines(@"C:'test'" + output.Key + ".csv", output);
}

我不知道如何添加一个片段的CSV,但我把一个片段的头字段,希望这有助于

ID,Ref,Title,首字母缩写,name,姓,File_Source

分割CSV文件与头c#

我强烈建议使用专门的库来解析CSV文件,它将第一行处理为头和其他所有内容。CSV格式并不像乍一看那么简单——例如,值可以用引号括起来("value"),引号可以在值内部转义。

我个人更喜欢使用CSVHelper -它既适合经典的。net和。net核心:

using (var fileRdr = new StreamReader(@"C:'test'test1.csv")) {
    var csvRdr = new CsvReader( fileRdr, 
                       new CsvConfiguration() { HasHeaderRecord = true } );
    while( csvRdr.Read() )
    {
        // list of csv headers
        var csvFields = csvRdr.FieldHeaders
        // get individual value by field name
        var sourceVal = csvRdr.GetField<string>( "File_Source" );
        // perform your data transformation logic here 
    }   
}

先读标题行:

var fileLinesIterator = File.ReadLines(...);
string headerLine = fileLinesIterator.Take(1);

然后将其附加到每个输出中:

var splitQuery = from line in fileLinesIterator
// ...

    File.WriteAllLines(@"C:'test'" + output.Key + ".csv", headerLine + "'r'n" + output);

但除此之外,您不希望仅仅将CSV文件作为(行)字符串来处理。