如何在C#中创建一个从字符串读取而来的TextReader对象(而不需要写入磁盘)?

148

我正在使用快速CSV阅读器将一些已粘贴的文本解析到网页中。 快速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

有什么想法,这是否是正确的方法?再次感谢您的帮助!

6个回答

296

使用 System.IO.StringReader

using(TextReader sr = new StringReader(yourstring))
{
    DoSomethingWithATextReader(sr);
}

10
使用继承了TextReaderStringReader类。

3
TextReader 不是一个接口,而是一个抽象类。 - svick

6

StringReader是一个TextReaderStreamReader也是,但用于从流中读取)。因此,只需使用第一个示例来构造CsvReader,而不是首先从中构造StreamReader

TextReader sr = new StringReader(TextBox_StartData.Text);
using(CsvReader csv = new CsvReader(sr, true))
{
  DetailsView1.DataSource = csv;
  DetailsView1.DataBind();
}

谢谢Jon...我认为Fast CSV框架有一个bug。我得到了一个看起来像这样的结果:!http://screencast.com/t/5wZRrjDMO... - Hairgami_Master
我的CSV文件是: 名字,姓氏,电子邮件 约翰,道,jd@email.com - Hairgami_Master
1
那个(在我查看源代码后发现你链接到http://screencast.com/t/5wZRrjDMO),看起来像是你正在生成一系列字符串数组(每行一个),并尝试渲染它们,这导致文本“System.String[]”重复出现。对于CSV解析器而言,这听起来像是一个合理的结果,但处理得不好。尝试将其输出到网格视图中,看看会发生什么。 - Jon Hanna
谢谢Jon-实际上,我正在使用GridView,我尝试了几个,但我猜数据被正确返回了,只是选择正确的数据显示控件的问题..?? - Hairgami_Master
1
我倾向于不过度使用控件,所以可能有些东西我会忽略。输出似乎是一系列字符串数组(每行一个数组,每个单元格一个字符串),这很合理。不确定为什么它不起作用,抱歉:( - Jon Hanna

5

您想要一个StringReader

var val = "test string";
var textReader = new StringReader(val);

2

只需使用StringReader类即可。它继承自TextReader。


1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接