web-dev-qa-db-ja.com

C#では、文字列からTextReaderオブジェクトを作成するにはどうすればよいですか(ディスクに書き込むことなく)

高速CSVリーダー を使用して、貼り付けられたテキストを解析してWebページにします。高速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\[email protected]\nAntoinette\tCalixte\[email protected]\nCathey\tPeden\[email protected]\n

これが正しいアプローチである場合、何かアイデアはありますか?ご協力ありがとうございます!

112
Hairgami_Master

System.IO.StringReader を使用します。

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

StringReaderを継承するTextReaderクラスを使用します。

7
Ilia G

StringReaderis a TextReaderStreamReaderもありますが、ストリームからの読み取り用)。したがって、最初の例を使用して、最初にCsvReaderを作成しようとするのではなく、それを使用してStreamReaderを作成するだけで、次のようになります。

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

あなたが欲しい StringReader

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

StringReader クラスを使用するだけです。 TextReaderを継承しています。

2
Ucodia

TextReaderのドキュメント を見ると、2つの継承クラスが表示されます。そして、そのうちの1つは StringReader で、これはまさにあなたが望むことをするようです。

1
svick