簡體   English   中英

如何跳到 csv 文件 csvhelper c# 的最后一個表/數據集

[英]How to skip to last table/dataset of csv file csvhelper c#

我的 csvFile 的結構如下:

val1,val2,val3
1,2,4
.
.
val1,val2,val3
3,7,8

val1,val2,val3
1,2,4
.
.
val1,val2,val3
3,7,8
.
.
val1,val2,val3
11,5,9

為此,csv 接頭都具有相同的名稱。

有了這個,我的問題是,我將如何一直跳到最后一個表/數據集? 所以要獲得表格:

//first csvFile
val1,val2,val3
3,7,8

//second csvFile
val1,val2,val3
11,5,9

到目前為止我所做的是實施

 for (var i = 0; i < 7; i++)//skip number of lines
  {
 csv.Read();//function here skips line to get to real header
  }     
 csv.Read();
 csv.ReadHeader();

有了這個,我可以一直向下跳過行,但前提是我知道到達我想要的行的間距,所以它是非常特定於文件的。 它將如何實現,以便您始終可以在不考慮行數的情況下獲得 csvFile 的最后一個 Header 值?

我也在使用開源庫 CsvHelper

CsvHelper 將從 Reader 讀取。 讀者可以從字符串中讀取。 因此,我們可以像這樣預處理文件:

  • 做一個字符串生成器
  • 逐行讀取文件,添加到stringbuilder
  • 每次遇到一組header,清空stringbuilder
  • 使用 CsvHelper 解析 stringbuilder 內容-邏輯上它只能包含最后一組 csv 數據,因為我們一直在清除它
var sb as new StringBuilder();
foreach(var line in File.ReadLines("path"){
    if(line == "val1,val2,val3")
        sb.Clear();

    sb.AppendLine(line);
}

using (var reader = new StringReader(sb.ToString()))
using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
{    
    var records = csv.GetRecords<...>();
}

如果val1,val2,val3會改變它們的順序、表示、空格等,那么你可以將標題變成一個字符串數組,然后詢問一行是否包含所有標題:

var headers = "val1 val2 val3".Split();

//and in the loop
if(headers.All(h => line.Contains(h)))
   ...

暫無
暫無

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

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