W C #, jak mogę utworzyć obiekt TextReader z ciągu (bez zapisywania na dysku)


126

Używam szybkiego czytnika CSV do analizowania wklejonego tekstu na stronie internetowej. Czytnik Fast CSV wymaga obiektu TextReader, a wszystko, co mam, to ciąg. Jaki jest najlepszy sposób na konwersję ciągu znaków na obiekt TextReader w locie?

Dzięki!

Aktualizacja - przykładowy kod - w oryginalnym przykładzie nowy StreamReader szuka pliku o nazwie „data.csv”. Mam nadzieję, że dostarczę go za pośrednictwem TextBox_StartData.Text.

Użycie tego kodu poniżej nie powoduje kompilacji.

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

new StreamReader(sr)Mówi mi, że ma pewne nieprawidłowe argumenty. Jakieś pomysły?

Jako alternatywne podejście próbowałem tego:

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

ale dostaję Illegal characters in path Error.Oto próbka ciągu z 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

Jakieś pomysły, jeśli to właściwe podejście? Jeszcze raz dziękujemy za pomoc!

Odpowiedzi:



9

Użyj StringReaderklasy, która dziedziczy TextReader.


3
TextReadernie jest interfejsem, to klasa abstrakcyjna.
svick


4

StringReader jestTextReader ( StreamReaderjest również, ale do odczytu strumienie). Więc biorąc pierwszy przykład i po prostu używając go do skonstruowania CsvReaderzamiast próbować skonstruować StreamReaderz niego najpierw, otrzymujemy:

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

Dzięki Jon ... Myślę, że jest błąd w Fast CSV Framework. Otrzymuję wynik, który wygląda następująco:! screencast.com/t/5wZRrjDMO ...
Hairgami_Master

Mój plik CSV to fname, lname, email john, doe, jd @ email.com
Hairgami_Master

1
To (po wyświetleniu źródła, aby zobaczyć, że i tak łączysz się z screencast.com/t/5wZRrjDMO ) wygląda na to, że tworzysz serię tablic ciągów (po jednym dla każdej linii) i próbujesz je renderować, co skutkuje tekst „System.String []” powtórzył się. Wydaje mi się, że jest to rozsądny wynik z parsera CSV, źle obsługiwany. Spróbuj przesłać go do widoku siatki i zobacz, co się stanie.
Jon Hanna,

Dzięki Jon- Właściwie używam GridView, wypróbowałem kilka z nich, ale zgaduję, że dane są zwracane prawidłowo, to tylko kwestia wyboru odpowiedniej kontroli wyświetlania danych .. ??
Hairgami_Master

1
Zwykle nie używam zbyt często elementów sterujących, więc może być coś, czego mi brakuje. Wynik wydaje się być serią tablic ciągów (jedna tablica na każdy wiersz, jeden ciąg na każdą komórkę), co ma sens. Nie jestem pewien, dlaczego to nie działa poza tym, obawiam się :(
Jon Hanna,


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.