C ++ erhält die Größe (in Byte) von EOL

8

Ich lese eine ASCII-Textdatei. Es wird durch die Größe jedes Feldes in Bytes definiert. Z.B. Jede Zeile besteht aus 10 Bytes für eine Zeichenfolge, 8 Bytes für einen Fließkommawert, 5 Bytes für eine ganze Zahl usw.

Mein Problem ist das Lesen des Newline-Zeichens, das je nach Betriebssystem eine variable Größe hat (normalerweise 2 Byte für Windows und 1 Byte für Linux, glaube ich).

Wie kann ich die Größe des EOL-Zeichens in C ++ ermitteln?

Zum Beispiel, in Python kann ich tun:

%Vor%     
jramm 05.01.2016, 07:35
quelle

2 Antworten

1

Die altehrwürdige Methode ist das Lesen einer Zeile.

Nun sollte das letzte Zeichen \n sein. Streifen Sie es ab. Dann schau dir das vorherige Zeichen an. Es wird entweder \r oder etwas anderes sein. Wenn es \r ist, entferne es.

Für Windows [ascii] Textdateien gibt es keine anderen Möglichkeiten.

Dies funktioniert auch, wenn die Datei gemischt ist (z. B. sind einige Zeilen \r\n und einige nur \n ).

Sie können das versuchsweise in ein paar Zeilen machen, nur um sicher zu sein, dass Sie nicht mit etwas Seltsamem zu tun haben.

Danach wissen Sie jetzt, was Sie für die meisten Dateien erwarten können. Aber, die Streifenmethode ist der allgemeine zuverlässige Weg. Unter Windows könnte eine Datei von Unix importiert werden (oder umgekehrt).

    
Craig Estey 05.01.2016 07:58
quelle
0

Ich bin mir nicht sicher, ob die Übersetzung dort stattfindet, wo Sie es für richtig halten. Sehen Sie sich den folgenden Code an:

%Vor%

Danach, unter Windows ausgeführt, i == 1. Also ist die End-of-Line-Definition in Std 1 Zeichen. Wie andere bereits angemerkt haben, ist dies das "\ n" Zeichen.

    
user3690202 05.01.2016 07:47
quelle

Tags und Links