ใน C # ฉันจะสร้างวัตถุ TextReader จากสตริงได้อย่างไร (โดยไม่ต้องเขียนลงดิสก์)


126

ฉันใช้A Fast CSV Readerเพื่อแยกวิเคราะห์ข้อความที่วางลงในเว็บเพจ โปรแกรมอ่าน Fast 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

ใช้ระดับซึ่งสืบทอดStringReaderTextReader


3
TextReaderไม่ใช่อินเทอร์เฟซ แต่เป็นคลาสนามธรรม
svick


4

StringReader เป็น a TextReader( StreamReaderเกินไป แต่สำหรับการอ่านจากสตรีม) ดังนั้นการใช้ตัวอย่างแรกของคุณและใช้เพื่อสร้างCsvReaderแทนที่จะพยายามสร้าง a StreamReaderจากมันก่อนจะให้:

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

ขอบคุณจอน ... ฉันคิดว่ามีข้อบกพร่องกับ Fast CSV Framework ฉันได้รับผลลัพธ์ที่มีลักษณะดังนี้:! screencast.com/t/5wZRrjDMO ...
Hairgami_Master

ไฟล์ CSV ของฉันคือ fname, lname, email john, doe, jd @ email.com
Hairgami_Master

1
สิ่งนั้น (หลังจากที่ฉันดูแหล่งที่มาเพื่อดูว่าคุณกำลังเชื่อมโยงไปยังscreencast.com/t/5wZRrjDMOอยู่ดี) ดูเหมือนว่าคุณกำลังสร้างอาร์เรย์ของสตริง (หนึ่งชุดสำหรับแต่ละบรรทัด) และพยายามแสดงผลซึ่งส่งผลให้ ข้อความ "System.String []" ซ้ำ ฉันคิดว่านี่เป็นผลลัพธ์ที่สมเหตุสมผลจากโปรแกรมแยกวิเคราะห์ CSV ซึ่งไม่ได้รับการจัดการที่ดี ลองส่งออกไปยังมุมมองตารางและดูว่าเกิดอะไรขึ้น
จอนฮันนา

ขอบคุณจอน - อันที่จริงฉันใช้ GridView ฉันได้ลองสองสามตัวแล้ว แต่ฉันเดาว่าข้อมูลจะถูกส่งกลับอย่างถูกต้องมันเป็นเพียงเรื่องของการเลือกตัวควบคุมการแสดงข้อมูลที่เหมาะสม .. ??
Hairgami_Master

1
ฉันมักจะไม่ใช้การควบคุมอย่างหนักดังนั้นอาจมีบางอย่างที่ฉันขาดหายไป ผลลัพธ์ดูเหมือนจะเป็นชุดของอาร์เรย์ของสตริง (หนึ่งอาร์เรย์สำหรับแต่ละแถวและหนึ่งสตริงสำหรับแต่ละเซลล์) ซึ่งเหมาะสม ไม่แน่ใจว่าทำไมมันถึงไม่ทำงานเกินกว่าที่ฉันกลัว :(
จอนฮันนา


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.