136

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

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

4

6 回答 6

270

使用System.IO.StringReader

using(TextReader sr = new StringReader(yourstring))
{
    DoSomethingWithATextReader(sr);
}
于 2011-10-20T14:56:09.087 回答
9

使用StringReader继承的类TextReader

于 2011-10-20T14:55:58.430 回答
5

StringReader is a TextReader( StreamReaderis too,但用于从流中读取)。因此,以您的第一个示例为例,仅使用它来构造,CsvReader而不是首先尝试从中构造 aStreamReader给出:

TextReader sr = new StringReader(TextBox_StartData.Text);
using(CsvReader csv = new CsvReader(sr, true))
{
  DetailsView1.DataSource = csv;
  DetailsView1.DataBind();
}
于 2011-10-20T15:39:40.713 回答
4

你想要一个StringReader

var val = "test string";
var textReader = new StringReader(val);
于 2011-10-20T14:56:53.667 回答
2

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

于 2011-10-20T14:57:07.610 回答
1

如果您查看的文档TextReader,您将看到两个继承类。其中之一是StringReader,这似乎完全符合您的要求。

于 2011-10-20T14:57:30.483 回答