2012-01-16 39 views
24

Tôi muốn chương trình của mình đọc từ hai tệp văn bản thành một số List<T>. List<T> sắp xếp và làm sạch các bản sao.Lưu từ Danh sách <T> sang txt

Tôi muốn List<T> để lưu (sau khi sắp xếp và làm sạch) vào tệp txt.

Nhưng khi tôi nhìn vào tập tin kết quả txt, tôi thấy tin nhắn này:

System.Collections.Generic.List`1 [System.String]

Có ai có một ý tưởng làm thế nào tôi có thể sửa lỗi này?

Đây là mã của tôi:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.IO; 

namespace Uniqpass 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 

      String pfad = "C:\\Dokumente und Einstellungen\\Bektas\\Desktop\\test\\"; 
      String pfad2 = "C:\\Dokumente und Einstellungen\\Bektas\\Desktop\\test\\"; 
      String speichern = "C:\\Dokumente und Einstellungen\\Bektas\\Desktop\\test\\ausgabe.txt"; 
      String datei = "text1.txt"; 
      String datei2 = "text2.txt"; 

      try 
      { 

       //Einlesen TxT 1 
       List<String> pass1 = new List<String>(); 
       StreamReader sr1 = new StreamReader(pfad + datei); 
       while (sr1.Peek() > -1) 
       { 

        pass1.Add(sr1.ReadLine()); 
       } 
       sr1.Close(); 
       //Einlesen TxT 2 
       StreamReader sr2 = new StreamReader(pfad2 + datei2); 
       while (sr2.Peek() > -1) 
       { 
        pass1.Add(sr2.ReadLine()); 
       } 
       sr2.Close(); 

       List<String> ausgabeListe = pass1.Distinct().ToList(); 
       ausgabeListe.Sort(); 

       ausgabeListe.ForEach(Console.WriteLine); 

       StreamWriter file = new System.IO.StreamWriter(speichern); 
       file.WriteLine(ausgabeListe); 
       file.Close(); 


      } 
      catch (Exception) 
      { 
       Console.WriteLine("Error"); 
      } 

      Console.ReadKey(); 
     } 
    } 
} 

Trả lời

10

Đó là dòng này mà viết đại diện ToString của Danh mục, kết quả vào dòng văn bản mà bạn có:

StreamWriter file = new System.IO.StreamWriter(speichern); 
file.WriteLine(ausgabeListe); 
file.Close(); 

Thay vào đó bạn muốn viết mỗi dòng .

StreamWriter file = new System.IO.StreamWriter(speichern); 
ausgabeListe.ForEach(file.WriteLine); 
file.Close(); 
66

Có một phương pháp ít tiện dụng File.WriteAllLines - không cần phải mở một StreamWriter mình:

Trong .net 4:

File.WriteAllLines(speichern, ausgabeListe); 

Trong .net 3.5:

File.WriteAllLines(speichern, ausgabeListe.ToArray()); 

Tương tự, bạn có thể thay thế logic đọc của mình bằng File.ReadAllLines , trả về một mảng các chuỗi (sử dụng ToList() trên đó nếu bạn muốn có một List<string>).

Vì vậy, trên thực tế, mã hoàn chỉnh của bạn có thể được giảm xuống còn:

// Input 
List<String> data = File.ReadAllLines(pfad + datei) 
    .Concat(File.ReadAllLines(pfad2 + datei2)) 
    .Distinct().ToList(); 

// Processing 
data.Sort(); 

// Output 
data.ForEach(Console.WriteLine); 
File.WriteAllLines(speichern, data); 
+1

Câu trả lời tuyệt vời. Chính xác những gì tôi cần. –

+2

Câu trả lời này là tuyệt vời vì nó làm giảm khả năng một số dòng mã vào một dòng. – Free2Rhyme2k

+0

@ Free2Rhyme2k: Có, và ít dòng mã hơn thường có nghĩa là ít lỗi hơn. – Heinzi

1

Vòng qua danh sách, viết từng dòng riêng lẻ:

StreamWriter file = new System.IO.StreamWriter(speichern); 
foreach(string line in ausgabeListe) 
    file.WriteLine(line); 
file.Close(); 
0

Bạn đang viết các đối tượng danh sách vào file , vì vậy bạn thấy tên loại.

Cũng giống như bạn đang sử dụng ForEach để ghi nội dung vào Bảng điều khiển, bạn cần phải lặp qua ausgabeListe, gọi WriteLine() cho từng mục trong danh sách.

0
StreamWriter file = new System.IO.StreamWriter(speichern); 
foreach(string x in ausgabeListe) 
    file.WriteLine(x); 
file.Close(); 
+0

Bạn có thể đặt tên cho các biến, chẳng hạn như "speichern" và "ausgabeListe" với một cái gì đó dễ hiểu hơn không? – Soyokaze

0

Tôi đang sử dụng LINQ như dưới đây để viết từng dòng vào tệp văn bản.

var myList=new List<string> 
{ 
    "Hello", 
    "World" 
}; 
using (var file = new StreamWriter("myfile.txt")) 
{ 
    myList.ForEach(v=>file.WriteLine(v)); 
} 
Các vấn đề liên quan