Ermitteln Sie, welche Zeilenendung in einer Textdatei verwendet wird

8

Was ist der beste Weg in C #, um die Zeilenenden in einer Textdatei (Unix, Windows, Mac) zu bestimmen?

    
Moo 10.06.2010, 15:01
quelle

7 Antworten

11

Beachten Sie, dass Textdateien inkonsistente Zeilenenden haben können. Ihr Programm sollte daran nicht ersticken. Die Verwendung von ReadLine auf einem StreamReader (und ähnlichen Methoden) sorgt automatisch für eine mögliche Zeilenendung.

Wenn Sie Zeilen manuell aus einer Datei lesen, müssen Sie beliebige Zeilenenden akzeptieren, auch wenn sie inkonsistent sind. In der Praxis ist dies mit dem folgenden Algorithmus sehr einfach:

  • Voraus scannen, bis Sie entweder CR oder LF finden.
  • Wenn Sie CR lesen, werfen Sie einen Blick auf das nächste Zeichen;
  • Wenn das nächste Zeichen LF ist, konsumieren Sie es (andernfalls setzen Sie es zurück).
Konrad Rudolph 10.06.2010, 15:19
quelle
3

Hier finden Sie ein paar Vermutungen: lesen Sie die Datei, zählen Sie CRs und LFs

%Vor%

Beachten Sie auch, dass neuere Macs (Mac OS X) Unix-Zeilenenden verwenden

    
unbeli 10.06.2010 15:17
quelle
1

Ich würde nur die Datei nach dem ersten \r oder \n durchsuchen und wenn es ein \n wäre, würde ich mir das vorherige Zeichen ansehen, um zu sehen, ob es ein \r ist, wenn ja, ist es \r\n , sonst ist es das, was Sie gefunden haben.

    
Hans Olsson 10.06.2010 15:07
quelle
0

Ich könnte mir vorstellen, dass Sie das nicht sicher wissen, müsste dies im Editor einstellen. Du könntest etwas KI verwenden, der Algorithmus wäre:

  1. Suchen Sie nach jedem Typ der Zeilenendung, und suchen Sie diese spezifischen Zeichen
  2. Messen Sie die Abstände zwischen ihnen.
  3. Wenn ein Typ dazu neigt, sich zu wiederholen, dann nehmen Sie an, dass dies der Typ ist. Zählen Sie die Wiederholungen und verwenden Sie ein gewisses Maß an Dispersion.

Wenn Sie beispielsweise CRLF-Wiederholungen bei 38, 40, 45 hatten und dies innerhalb der Toleranz war, nahmen Sie standardmäßig an, dass das Zeilenende CRLF war.

    
Curtis White 10.06.2010 15:06
quelle
0

Wenn ich es wäre, würde ich die Datei nur ein Zeichen nach der anderen lesen, bis ich auf die erste \r oder eine \n stößt. Dies setzt voraus, dass Sie sinnvolle Eingaben haben.

    
zildjohn01 10.06.2010 15:06
quelle
0

Beim Lesen der meisten Textformate suche ich normalerweise nach \ n und dann trim () die ganze Zeichenfolge (Leerzeichen am Anfang und am Ende sind oft redundant).

    
nothrow 10.06.2010 15:16
quelle
0

Es gibt Environment.NewLine , das dient nur dazu, zu bestimmen, was auf dem aktuellen System verwendet wird und hilft nicht beim Lesen von Dateien aus verschiedenen Quellen.

Wenn es liest, suche ich normalerweise nach \n (Bearbeiten: apperantly gibt es einige, die nur \r verwenden) und nehmen an, dass die Zeile dort endet.

    
Don 10.06.2010 15:04
quelle

Tags und Links