在 C# 中,如何从字符串创建 TextReader 对象(不写入磁盘)
Posted
技术标签:
【中文标题】在 C# 中,如何从字符串创建 TextReader 对象(不写入磁盘)【英文标题】:In C#, how can I create a TextReader object from a string (without writing to disk) 【发布时间】:2011-12-11 21:02:00 【问题描述】:我正在使用A Fast CSV Reader 将一些粘贴的文本解析到网页中。快速 CSV 阅读器需要一个 TextReader 对象,而我只有一个字符串。动态将字符串转换为 TextReader 对象的最佳方法是什么?
谢谢!
更新- 示例代码 - 在原始示例中,一个新的 StreamReader 正在寻找一个名为“data.csv”的文件。我希望通过 TextBox_StartData.Text 提供它。
使用下面的代码无法编译。
TextReader sr = new StringReader(TextBox_StartData.Text);
using (CsvReader csv = new CsvReader(new StreamReader(sr), true))
DetailsView1.DataSource = csv;
DetailsView1.DataBind();
new StreamReader(sr)
告诉我它有一些无效的参数。有什么想法吗?
作为另一种方法,我已经尝试过:
TextReader sr = new StreamReader(TextBox_StartData.Text);
using (CsvReader csv = new CsvReader(sr, true))
DetailsView1.DataSource = csv;
DetailsView1.DataBind();
但我得到一个Illegal characters in path Error.
这是来自 TextBox_StartData.Text 的字符串示例:
Fname\tLname\tEmail\nClaude\tCuriel\tClaude.Curiel@email.com\nAntoinette\tCalixte\tAntoinette.Calixte@email.com\nCathey\tPeden\tCathey.Peden@email.com\n
如果这是正确的方法,有什么想法吗?再次感谢您的帮助!
【问题讨论】:
【参考方案1】:使用System.IO.StringReader:
using(TextReader sr = new StringReader(yourstring))
DoSomethingWithATextReader(sr);
【讨论】:
【参考方案2】:使用继承TextReader
的StringReader
类。
【讨论】:
TextReader
不是接口,它是一个抽象类。【参考方案3】:
StringReader
是 TextReader
(StreamReader
也是,但用于从流中读取)。因此,以您的第一个示例为例,仅使用它来构造CsvReader
,而不是首先尝试从中构造StreamReader
:
TextReader sr = new StringReader(TextBox_StartData.Text);
using(CsvReader csv = new CsvReader(sr, true))
DetailsView1.DataSource = csv;
DetailsView1.DataBind();
【讨论】:
感谢 Jon... 我认为 Fast CSV 框架存在错误。我得到的结果如下所示:!screencast.com/t/5wZRrjDMO... 我的 CSV 是 fname,lname,email john,doe,jd@email.com 那(在我查看源代码后看到您链接到screencast.com/t/5wZRrjDMO 无论如何)看起来您正在生成一系列字符串数组(每行一个),并尝试渲染它们,这会导致文本“System.String[]”重复。在我看来,这听起来像是来自 CSV 解析器的合理结果,但处理得不好。尝试将其输出到网格视图,看看会发生什么。 谢谢 Jon- 实际上,我正在使用 GridView,我已经尝试了其中的几个,但我猜数据正在正确返回,这只是选择正确的数据显示的问题控制..?? 我倾向于不大量使用控件,所以我可能缺少一些东西。输出似乎是一系列字符串数组(每行一个数组,每个单元格一个字符串),这是有道理的。不知道为什么它不能超出我担心的范围:(【参考方案4】:你想要一个StringReader
var val = "test string";
var textReader = new StringReader(val);
【讨论】:
【参考方案5】:只需使用StringReader 类。它继承自 TextReader。
【讨论】:
【参考方案6】:如果您查看the documentation for TextReader
,您将看到两个继承类。其中之一是StringReader
,它似乎完全符合您的要求。
【讨论】:
以上是关于在 C# 中,如何从字符串创建 TextReader 对象(不写入磁盘)的主要内容,如果未能解决你的问题,请参考以下文章
在 C# 中,如何使用十六进制值创建 System.Drawing.Color 对象? [复制]