Beim Arbeiten mit Textdateien ist es oft notwendig, jede Zeile einzeln zu verarbeiten. C# bietet mehrere Ansätze für diese Aufgabe, aber LINQ kann eine präzisere und effizientere Lösung bieten, ohne die betriebliche Effizienz zu beeinträchtigen.
Der klassische Ansatz beinhaltet die Verwendung eines StreamReader. Allerdings bietet LINQ eine leistungsstarke Alternative, die flexibleren und lesbareren Code ermöglicht. Iteratoren können verwendet werden, um eine Folge von Zeilen zu erstellen, die dann im Streaming-Modus verarbeitet werden können, sodass nicht die gesamte Datei in den Speicher geladen werden muss.
Hier ist ein Beispiel für einen solchen Iterator-basierten LINQ-Ausdruck :
static IEnumerable<string> ReadFrom(string file) { string line; using(var reader = File.OpenText(file)) { while((line = reader.ReadLine()) != null) { yield return line; } } }
Diese Funktion gibt eine Folge von Zeilen zurück, die aus der angegebenen Datei gelesen wurden. Jede Zeile wird beim Lesen ausgegeben, was eine verzögerte Auswertung und effiziente Verarbeitung ermöglicht.
Um die Zeilen weiter zu verarbeiten, können Sie LINQ-Methoden wie Where, Select und Aggregate verwenden, um Filterung, Zuordnung und Aggregation durchzuführen Operationen ohne die Notwendigkeit einer expliziten Iteration. Zum Beispiel:
var typedSequence = from line in ReadFrom(path) let record = ParseLine(line) where record.Active // for example select record.Key;
In diesem Beispiel wird die ReadFrom-Funktion verwendet, um eine Folge von Zeilen zu erstellen. Jede Zeile wird dann mithilfe der ParseLine-Funktion in einen Datensatz geparst. Die Where-Klausel filtert inaktive Datensätze heraus und die Select-Klausel projiziert einen Schlüsselwert aus jedem verbleibenden Datensatz.
Zusammenfassend lässt sich sagen, dass LINQ und Iteratoren verwendet werden können, um effizienten und wartbaren Code zum zeilenweisen Einlesen von Dateien zu erstellen C#. Durch die Nutzung der Funktionen von Iteratoren können Sie den Aufwand für das Laden der gesamten Datei in den Speicher vermeiden und den Dateiverarbeitungsprozess optimieren.
Das obige ist der detaillierte Inhalt vonWie können LINQ und Iteratoren eine Datei Zeile für Zeile in C# effizient lesen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!