在C#中,如何从字符串创建TextReader对象(不写入磁盘)


126

我正在使用快速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

任何想法,如果这是正确的方法?再次感谢您的帮助!

Answers:





4

StringReader 一个TextReaderStreamReader也是,但用于从流读取)。因此,以您的第一个示例并仅使用它来构造CsvReader而不是首先尝试从中构造a StreamReader可以得出:

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

谢谢乔恩...我认为快速CSV框架存在错误。我得到的结果看起来像这样:screencast.com/t/5wZRrjDMO ...
Hairgami_Master 2011年

我的CSV文件是fname,lname,电子邮件john,doe,jd @ email.com
Hairgami_Master 2011年

1
(在我查看源代码后,无论如何您都链接到screencast.com/t/5wZRrjDMO)似乎都在生成一系列字符串数组(每行一个),并尝试呈现它们,结果导致重复文本“ System.String []”。在我看来,这听起来像是CSV解析器的合理结果,但处理得不好。尝试将其输出到网格视图,看看会发生什么。
乔恩·汉纳

谢谢乔恩-实际上,我正在使用GridView,我尝试了其中的一些,但是我猜想数据已正确返回,这只是选择正确的数据显示控件的问题。
Hairgami_Master 2011年

1
我倾向于不大量使用控件,因此可能缺少某些内容。输出似乎是一系列字符串数组(每行一个数组,每个单元格一个字符串),这很有意义。不知道为什么它不起作用,恐怕:(
Jon Hanna


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.