En C #, ¿cómo puedo crear un objeto TextReader desde una cadena (sin escribir en el disco)


126

Estoy usando A Fast CSV Reader para analizar un texto pegado en una página web. El lector Fast CSV requiere un objeto TextReader, y todo lo que tengo es una cadena. ¿Cuál es la mejor manera de convertir una cadena en un objeto TextReader sobre la marcha?

¡Gracias!

Actualización- Código de muestra- En la muestra original, un nuevo StreamReader está buscando un archivo llamado "data.csv". Espero suministrarlo a través de TextBox_StartData.Text.

El uso de este código a continuación no se compila.

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

El new StreamReader(sr)me dice que tiene algunos argumentos no válidos. ¿Algunas ideas?

Como un enfoque alternativo, he intentado esto:

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

pero obtengo un Illegal characters in path Error.Aquí hay una muestra de la cadena de 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

¿Alguna idea si este es el enfoque correcto? ¡De nuevo, gracias por tu ayuda!

Respuestas:



9

Usa la StringReaderclase, que hereda TextReader.


3
TextReaderNo es una interfaz, es una clase abstracta.
svick


4

StringReader es un TextReader( StreamReadertambién lo es, pero para leer desde secuencias). Entonces, tomando su primer ejemplo y simplemente usándolo para construir el en CsvReaderlugar de tratar de construir un a StreamReaderpartir de él primero da:

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

Gracias Jon ... Creo que hay un error con Fast CSV Framework. Estoy obteniendo un resultado como este:! screencast.com/t/5wZRrjDMO ...
Hairgami_Master

Mi CSV es fname, lname, correo electrónico john, doe, jd @ email.com
Hairgami_Master

1
Eso (después de ver el código fuente para ver que se está vinculando a screencast.com/t/5wZRrjDMO de todos modos) parece que está produciendo una serie de matrices de cadenas (una para cada línea) e intentando representarlas, lo que resulta en el texto "System.String []" repite. Esto me parece un resultado razonable de un analizador CSV, no manejado bien. Intente enviarlo a una vista de cuadrícula y vea qué sucede.
Jon Hanna

Gracias Jon. En realidad, estoy usando un GridView, he probado un par de ellos, pero supongo que los datos se devuelven correctamente, solo es cuestión de elegir el Control de visualización de datos correcto.
Hairgami_Master

1
Tiendo a no hacer un uso intensivo de los controles, por lo que puede haber algo que me falta. El resultado parece ser una serie de matrices de cadenas (una matriz para cada fila, una cadena para cada celda), lo que tiene sentido. No estoy seguro de por qué no funciona más allá de eso, me temo :(
Jon Hanna


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.