簡體   English   中英

使用標頭c#拆分CSV文件

[英]Split CSV files with header c#

我需要通過源字段拆分大型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,Initials,Forename,Surname,File_Source

我強烈建議使用專用庫來解析CSV文件,將第一行作為標題和其他所有內容處理。 CSV格式並不簡單,因為它可能從第一眼看起來 - 例如,值可能在引號(“值”)中,並且引號可能在值內轉義。

我個人更喜歡使用CSVHelper - 它適用於經典的.NET和.NET Core:

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文件處理為僅僅(行)字符串。 你一定會遇到引用和多線值的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM