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


126

高速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\tClaude.Curiel@email.com\nAntoinette\tCalixte\tAntoinette.Calixte@email.com\nCathey\tPeden\tCathey.Peden@email.com\n

これが正しいアプローチであるかどうかのアイデアはありますか?あなたの助けをありがとう!

回答:



9

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


3
TextReaderインターフェースではなく、抽象クラスです。
2010年


4

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 ...
Hairgami_Master

私のCSVは、fname、lname、email john、doe、jd @ email.com
Hairgami_Master

1
それは(とにかくscreencast.com/t/5wZRrjDMOにリンクしていることを確認するためにソースを表示した後)、一連の文字列の配列(各行に1つ)を生成し、それらをレンダリングしようとしているように見えます。 「System.String []」というテキストが繰り返されました。これは、CSVパーサーからの妥当な結果のように思えますが、うまく処理されません。グリッドビューに出力して、何が起こるかを確認してください。
ジョンハンナ

ありがとうJon-実際には、GridViewを使用しています。いくつか試してみましたが、データが適切に返されていると思います。正しいデータ表示コントロールを選択するだけです。
Hairgami_Master

1
私はコントロールを頻繁に使用しない傾向があるので、そこに欠けているものがあるかもしれません。出力は一連の文字列の配列(各行に1つの配列、各セルに1つの文字列)のように見えますが、これは理にかなっています。それがそれを超えて機能しない理由がわからない:(
Jon Hanna


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.