簡體   English   中英

使用CsvHelper(或類似的庫)從可變讀CSV

[英]Read CSV from variable using CsvHelper (or similar library)

我有一個函數,它等效於Web請求,並且它返回格式化的CSV。 我的目標是現在將這些數據導入CsvHelper。 但是,我似乎無法讓CSVParser從靜態文本中讀取,而只能從流中讀取。

我可以將輸出寫到文件中,然后再讀回去,但是我覺得這里沒有多大意義。

我完全不依賴於CsvHelper,但是似乎找不到支持此行為的CSV庫。 我應該怎么做?

var csvString = functionThatReturnsCsv()
/* as string:
columnA,columnB
dataA,dataB
*/

// my goal
???.parse(csvString)

您可以將字符串轉換為Stream in內存,然后將其用作CSV閱讀器的源:

public static Stream StringAsStream(string value)
{
    return StringAsStream(value, System.Text.Encoding.UTF8);
}

public static Stream StringAsStream(string value, System.Text.Encoding encoding)
{
    var bytes = encoding.GetBytes(value);
    return new MemoryStream(bytes);
}

用法:

using (var stream = StringAsStream("hello"))
{
    // csv reading code here
}

要么

using (var stream = StringAsStream("hello", Encoding.Ascii))
{
    // csv reading code here
}

在線嘗試

注意如果您正在從可以返回Stream的源中讀取(例如Web請求),則應使用該Stream而不是這樣做。

您可以使用StringReader CsvReader構造函數采用TextReader參數而不是Stream 如果確實有流而不是字符串,則將StringReader替換為StreamReader

public static void Main(string[] args)
{    
    using (var reader = new StringReader(FunctionThatReturnsCsv()))
    using (var csv = new CsvReader(reader))
    {
        var results = csv.GetRecords<Foo>().ToList();
    }            
}

public static string FunctionThatReturnsCsv()
{
    return "columnA,columnB\ndataA,dataB";
}

public class Foo
{
    public string columnA { get; set; }
    public string columnB { get; set; }
}          

暫無
暫無

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

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