wake-up-neo.com

Speichern von Liste <T> in Text

Ich möchte, dass mein Programm aus zwei Textdateien in eine List<T>..__ liest. Der List<T> sortiert und bereinigt Duplikate.

Ich möchte, dass der List<T> (nach dem Sortieren und Bereinigen) in einer Textdatei gespeichert wird.

Aber als ich in der Ergebnis-TXT-Datei nachgesehen habe, habe ich folgende Nachricht gefunden:

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

Hat jemand eine Idee, wie ich diesen Fehler beheben könnte?

Hier ist mein Code:

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();
        }
    }
}
27
Jon Cylo

Es gibt eine praktische kleine Methode File.WriteAllLines - Sie müssen keine StreamWriter selbst öffnen:

In. Net 4:

File.WriteAllLines(speichern, ausgabeListe);

In .net 3.5:

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

Ebenso können Sie Ihre Leselogik durch File.ReadAllLines ersetzen, wodurch ein String-Array zurückgegeben wird (verwenden Sie ToList(), wenn Sie einen List<string> benötigen).

Ihr vollständiger Code könnte also auf Folgendes reduziert werden:

// 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);
70
Heinzi

Diese Zeile schreibt die ToString-Darstellung der Liste, die sich in der Textzeile befindet, die Sie erhalten haben:

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

Stattdessen möchten Sie jede Zeile schreiben.

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

Die Liste durchgehen und jede Zeile einzeln schreiben:

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

Ich verwende LINQ wie folgt, um jede Zeile in eine Textdatei zu schreiben.

var myList=new List<string>
{
    "Hello",
    "World"
};
using (var file = new StreamWriter("myfile.txt"))
{
    myList.ForEach(v=>file.WriteLine(v));
}
0
LENG UNG

Sie schreiben das Listenobjekt in die Datei, sodass der Typname angezeigt wird.

So wie Sie ForEach verwenden, um den Inhalt in die Konsole zu schreiben, müssen Sie ausgabeListe durchlaufen und WriteLine() für jedes Element in der Liste aufrufen.

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

Probieren Sie den folgenden Code aus:

StreamWriter writer = new StreamWriter("C:\\Users\\Alchemy\\Desktop\\c#\\InputFileFrmUser.csv");
list = new List<Product>() { new Product() { ProductId=1, Name="Nike 12N0",Brand="Nike",Price=12000,Quantity=50},
        new Product() { ProductId =2, Name = "Puma 560K", Brand = "Puma", Price = 120000, Quantity = 55 },
        new Product() { ProductId=3, Name="WoodLand V2",Brand="WoodLand",Price=21020,Quantity=25},
        new Product() { ProductId=4, Name="Adidas S52",Brand="Adidas",Price=20000,Quantity=35},
        new Product() { ProductId=5, Name="Rebook SPEED2O",Brand="Rebook",Price=1200,Quantity=15}};

foreach (var x in list) {
    string wr = x.ProductId + " " + x.Name + "" + x.Brand + " " + x.Quantity + " " + x.Price;
    writer.Flush();
    writer.WriteLine(wr);

}
Console.WriteLine("--------ProductList Updated SucessFully----------------");
0
Prabhakaran M