在 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】:

使用继承TextReaderStringReader类。

【讨论】:

TextReader 不是接口,它是一个抽象类。【参考方案3】:

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 框架存在错误。我得到的结果如下所示:!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 对象? [复制]

用于从配置文件创建数组的可扩展 C# 代码

从存储在 MYSQL 中的 C# 生成唯一 ID

如何在 C# 中使用类型和属性名称从 XML 创建动态对象?

如何在 C# 中从包含 XML 的字符串中读取数据?

在C#中提取字符串末尾的数字