7 Stimmen

In die Dateizeile springen c#

Wie kann ich zu einer bestimmten Zeile in meiner Datei springen, z.B. Zeile 300 in c:\text.txt?

13voto

Darin Dimitrov Punkte 990883
using (var reader = new StreamReader(@"c:\test.txt"))
{
    for (int i = 0; i < 300; i++)
    {
        reader.ReadLine();
    }
    // Sie befinden sich jetzt in Zeile 300. Sie können mit dem Lesen fortfahren
}

9voto

jason Punkte 227577

Zeilenbasierte Dateien sind nicht für den zufälligen Zugriff konzipiert. Daher müssen Sie sich durch die Datei suchen, indem Sie die erforderliche Anzahl von Zeilen lesen und verwerfen.

Moderner Ansatz:

class LineReader : IEnumerable, IDisposable {
        TextReader _reader;
        public LineReader(TextReader reader) {
            _reader = reader;
        }

        public IEnumerator GetEnumerator() {
            string line;
            while ((line = _reader.ReadLine()) != null) {
                yield return line;
            }
        }

        IEnumerator IEnumerable.GetEnumerator() {
            return GetEnumerator();
        }

        public void Dispose() {
            _reader.Dispose();
        }
    }

Verwendung:

// path is string
int skip = 300;
StreamReader sr = new StreamReader(path);
using (var lineReader = new LineReader(sr)) {
    IEnumerable lines = lineReader.Skip(skip);
    foreach (string line in lines) {
        Console.WriteLine(line);
    }
}

Einfacher Ansatz:

string path;
int count = 0;
int skip = 300;
using (StreamReader sr = new StreamReader(path)) {
     while ((count < skip) && (sr.ReadLine() != null)) {
         count++;
     }
     if(!sr.EndOfStream)
         Console.WriteLine(sr.ReadLine());
     }
}

1voto

Joel Etherton Punkte 36629
Dim arrText() As String 
Dim lineThreeHundred As String

arrText = File.ReadAllLines("c:\test.txt") 

lineThreeHundred = arrText(299) 

Bearbeiten: C# Version

string[] arrText;
string lineThreeHundred;

arrText = File.ReadAllLines("c:\test.txt");
lineThreeHundred = arrText[299];

1voto

David Punkte 1187

Ein paar Dinge, die mir aufgefallen sind:

  1. Microsofts Beispiel zur Verwendung des StreamReader-Konstruktors überprüft zuerst, ob die Datei existiert.

  2. Sie sollten den Benutzer über eine Nachricht auf dem Bildschirm oder in einem Log darüber informieren, wenn die Datei entweder nicht existiert oder kürzer ist als erwartet. Auf diese Weise erfahren Sie über etwaige unerwartete Fehler, falls sie während des Debuggens anderer Teile des Systems auftreten. Mir ist bewusst, dass dies nicht Teil Ihrer ursprünglichen Frage war, aber es ist eine gute Praxis.

Also handelt es sich um eine Kombination mehrerer anderer Antworten.

string path = @"C:\test.txt";
int count = 0;

if(File.Exists(path))
{
  using (var reader = new StreamReader(@"c:\test.txt"))
  {
    while (count < 300 && reader.ReadLine() != null)
    {
      count++;
    }

    if(count != 300)
    {
      Console.WriteLine("In dieser Datei gibt es weniger als 300 Zeilen.");
    }
    else
    {
      // mit der Verarbeitung fortfahren
    }
  }
}
else
{
  Console.WriteLine("Die Datei '" + path + "' existiert nicht.");
}

0voto

Jeffrey L Whitledge Punkte 55524
/// 
/// Ruft die angegebene Zeile aus einer Textdatei ab.
/// 
/// Die Nummer der zurückzugebenden Zeile.
/// Identifiziert die zu lesende Textdatei.
/// Die angegebene Zeile, falls vorhanden, oder ein leerer String sonst.
/// Die Zeilennummer ist negativ oder der Pfad fehlt.
/// Die Datei konnte nicht gelesen werden.
public static string GetNthLineFromTextFile(int lineNumber, string path)
{
    if (lineNumber < 0)
        throw new ArgumentException(string.Format("Ungültige Zeilennummer \"{0}\". Muss größer als null sein.", lineNumber));
    if (string.IsNullOrEmpty(path))
        throw new ArgumentException("Es wurde kein Pfad angegeben.");

    using (System.IO.StreamReader reader = new System.IO.StreamReader(path))
    {
        for (int currentLineNumber = 0; currentLineNumber < lineNumber; currentLineNumber++)
        {
            if (reader.EndOfStream)
                return string.Empty;
            reader.ReadLine();
        }
        return reader.ReadLine();
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X