[英]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.