Trong C #, làm cách nào để tạo đối tượng TextReader từ một chuỗi (mà không cần ghi vào đĩa)


126

Tôi đang sử dụng A Fast CSV Reader để phân tích cú pháp một số văn bản đã dán vào một trang web. Trình đọc Fast CSV yêu cầu một đối tượng TextReader và tất cả những gì tôi có là một chuỗi. Cách tốt nhất để chuyển đổi một chuỗi thành một đối tượng TextReader một cách nhanh chóng là gì?

Cảm ơn!

Cập nhật- Mã mẫu- Trong mẫu ban đầu, StreamReader mới đang tìm kiếm tệp có tên "data.csv". Tôi hy vọng cung cấp nó thông qua TextBox_StartData.Text.

Sử dụng mã này bên dưới không biên dịch.

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

Cho new StreamReader(sr)tôi biết nó có một số đối số không hợp lệ. Có ý kiến ​​gì không?

Là một cách tiếp cận thay thế, tôi đã thử điều này:

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

nhưng tôi nhận được Illegal characters in path Error.Đây là một mẫu chuỗi từ 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

Bất kỳ ý tưởng nếu đây là cách tiếp cận đúng? Cảm ơn một lần nữa vì sự giúp đỡ của bạn!

Câu trả lời:



9

Sử dụng StringReaderlớp kế thừa TextReader.


3
TextReaderkhông phải là một giao diện, nó là một lớp trừu tượng.
svick


4

StringReader một TextReader( StreamReaderquá, nhưng để đọc từ các luồng). Vì vậy, lấy ví dụ đầu tiên của bạn và chỉ sử dụng nó để xây dựng CsvReaderthay vì cố gắng tạo một StreamReadertừ nó trước tiên sẽ cho:

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

Cảm ơn Jon ... Tôi nghĩ rằng có một lỗi với Khung CSV Nhanh. Tôi nhận được một kết quả như sau:! screencast.com/t/5wZRrjDMO ...
Hairgami_Master

CSV của tôi là fname, lname, email john, nai, jd @ email.com
Hairgami_Master

1
Điều đó (sau khi tôi xem-nguồn thấy rằng bạn vẫn đang liên kết đến screencast.com/t/5wZRrjDMO ) có vẻ như bạn đang tạo ra một loạt các mảng chuỗi (mỗi chuỗi một cho mỗi dòng) và cố gắng hiển thị chúng, dẫn đến văn bản "System.String []" được lặp lại. Điều này nghe có vẻ như là một kết quả hợp lý từ trình phân tích cú pháp CSV, không được xử lý tốt. Hãy thử xuất nó ra dạng xem lưới và xem điều gì sẽ xảy ra.
Jon Hanna

Cảm ơn Jon- Thực ra, tôi đang sử dụng GridView, tôi đã thử một vài trong số chúng, nhưng tôi đoán dữ liệu đang được trả về đúng cách, vấn đề chỉ là chọn Kiểm soát hiển thị dữ liệu phù hợp thôi .. ??
Hairgami_Master

1
Tôi có xu hướng không sử dụng nhiều các điều khiển, vì vậy có thể có điều gì đó tôi đang thiếu. Đầu ra dường như là một chuỗi các mảng chuỗi (một mảng cho mỗi hàng, một chuỗi cho mỗi ô), điều này có ý nghĩa. Bạn không chắc chắn lý do tại sao nó không làm việc ngoài mà tôi sợ :(
Jon Hanna


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.