2016-07-09 2 views
0

Ich versuche, jede Zeile nach den ersten zwei Zeilen in einer Textdatei zu greifen und sie in eine Zeichenfolge zu platzieren.Gibt es eine Möglichkeit, eine bestimmte Gruppe von Zeilen mit File.ReadLines zu verwenden?

, was ich bisher habe, ist

Count = File.ReadLines(filepath).Count(); 
String Lines = File.ReadLines(filepath.Skip(2).Take(Count -2).First()); 

Dieser packt die erste Zeile, die ich will, aber nicht nach diesem Punkt alle Zeilen zu sammeln. Ich nehme an, dass dies daran liegt, dass eine Zeichenfolge nur eine einzige Zeile enthalten kann? Ich bin mir nicht wirklich sicher, ob das falsch ist oder nicht, aber wenn es so ist, kann ich keinen Weg finden, das Problem zu beheben.

+0

Verwenden Sie ein Array: 'string [] lines = File.ReadLines (filepath) .skip (2) .Nehmen (Count - 2))); und lösche die '.First()'. Sie können wahrscheinlich auch '' Take() 'ablegen:' string [] lines = File.ReadLines (Dateipfad) .Skip (2); ' – Tim

+0

Dies gibt mir eine" kann nicht implizit Typ in String [] Fehler – Spooler

+1

'konvertieren ReadLines' gibt ein 'IEnumerable ' zurück, also entweder die 'line' Variablen in 'IEnumerable Zeilen' ändern oder' .ToArray() 'am Ende aufrufen:' string [] lines = File.ReadLines (filepath) .Skip (2). ToArray(); ' – Tim

Antwort

2

File.ReadLines gibt eine IEnumerable<string> zurück, keine string. Der Aufruf an .Take() ist nicht erforderlich, da Sie alles nach den ersten zwei Zeilen möchten, und der Aufruf an First() wird das erste Ergebnis in der Sequenz nehmen und den Rest verwerfen (was nicht gewünscht wird).

So lines als IEnumerable<string> erklären und entfernen Take() und First() (auch auf die Reihenfolge der Klammern bezahlen, als geschrieben Code ein ) nach filepath gehabt haben sollte): Alternativ

IEnumerable<string> lines = File.ReadLines(filepath).Skip(2); 

, könnten Sie definieren lines als ein Array von String oder einem List<T> und rufen ToArray() oder ToList() am Ende Ihrer LINQ-Anweisung wie folgt aus:

string[] lines = File.ReadLines(filepath).Skip(2).ToArray(); 

oder

List<string> lines = File.ReadLines(filepath).Skip(2).ToList(); 

könnten Sie auch var verwenden:

var lines = File.ReadLines(filepath).Skip(2); 
+2

gibt es auch nur' string [ ] Zeilen = File.ReadAllLines (Datei Pfad) .Skip (2) ' – txtechhelp

+0

Yep - viele Möglichkeiten, dies zu tun :) – Tim

Verwandte Themen