Text-Datei Lesen Wort für Wort mit LINQ
Ich Lerne, LINQ, und ich möchte, um eine Textdatei zu Lesen (sagen wir mal ein e-book) Wort für Wort mit LINQ.
Dies ist weiss ich kommen konnte mit:
static void Main()
{
string[] content = File.ReadAllLines("text.txt");
var query = (from c in content
select content);
foreach (var line in content)
{
Console.Write(line+"\n");
}
}
Dieser liest die Datei zeilenweise ein. Wenn ich ReadAllLines
zu ReadAllText
ist, wird die Datei Lesen Buchstabe für Buchstabe.
Irgendwelche Ideen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie hinzufügen, was whitespace-Zeichen, die Sie benötigen. Mit StringSplitOptions Umgang mit aufeinanderfolgenden Leerzeichen ist sauberer als in der Where-Klausel, die ich ursprünglich verwendet.
In .net 4 können Sie die Datei.ReadLines für lazy evaluation und damit eine geringere RAM-Auslastung beim arbeiten an großen Dateien.
new Regex(@"[^\w'-]")
fangen die meisten nicht-word-chars, aber halten ' und in Worte intakt. Wenn Sie nicht in .NET 4, Sie können auch schreiben Sie Ihre eigenen faul-bewertet ReadLines von einem TextReader, wiefor(string line = rdr.ReadLine(); line != null; line = rdr.ReadLine())yield return line;
Müssen Sie definieren das array von whitespace-chars mit Ihren eigenen Werten in etwa so:
Diesem code wird davon ausgegangen, dass panctuation ist ein Teil des Wortes (wie ein Komma).
Ist es wahrscheinlich besser, alle Lesen den text mit ReadAllText (), verwenden Sie reguläre Ausdrücke, die Wörter zu erhalten. Mit dem Leerzeichen als Trennzeichen können dazu führen, dass einige Unannehmlichkeiten, da wird es auch wieder die Zeichensetzung (Kommas, Punkte, etc...). Zum Beispiel:
Folgende Verwendungen iterator-Blöcke, und deshalb verwendet die verzögerte laden. Andere Lösungen haben, laden Sie die gesamte Datei in den Speicher, bevor Sie in der Lage, die Iteration über die Worte.
(Split(null) Leerzeichen automatisch entfernt)
Verwenden Sie es wie diese:
Arbeitet mit den standard-Linq-funness zu:
Natürlich Fehler-handling und vieles mehr. Links für den Willen zu lernen.
Könnten Sie schreiben
content.ToList().ForEach(p => p.Split(' ').ToList().ForEach(Console.WriteLine))
aber das ist nicht viel linq.