Ich habe diverse CSV Dateien die ein ^Z (laut Darstellung von emacs) am Ende, d.h. als letztes Zeichen, zeigen. Es ist das letzte Zeichen. Es gibt kein \n am Ende der Datei.
Zu diesem Zeichen habe ich bei einer kurzen Suchmaschinen-Abfrage nichts gefunden. Hat jemand eine Ahnung, was das bedeutet?
[Gelöst] Was bedeutet "^Z"?
[Gelöst] Was bedeutet "^Z"?
Zuletzt geändert von buhtz am 25.10.2022 16:46:07, insgesamt 1-mal geändert.
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (backintime)
Teil des Upstream Betreuer Teams von Back In Time (backintime)
Re: Was bedeutet "^Z"?
^Z ist eine Ersatzdarstellung fuer ein Steuerzeichen. (Das ^ steht hier fuer Strg.) Man kann es im Terminal eingeben indem man ^V^Z (also Strg+V gefolgt von Strg+Z) eingibt. Das ^V escapet das folgende Zeichen, so dass das ^Z nicht dazu fuehrt, dass der aktive Prozess suspendiert wird.
Wenn ich es richtig sehe, dann hat das Zeichen ^Z den Wert 0x1A.
Was das im Kontext der CSV-Dateien bedeuten soll, weiss ich nicht.
Ich kann auch nicht sagen, ob hier Emacs irgendwie reinpusht. Das koenntest du aber testen, indem du dir die letzten paar Bytes der Datei mit `od' anzeigst:
Dort sollte dann eine 032 auf tauchen (das die Oktaldarstellung von 0x1A ist).
Wenn ich es richtig sehe, dann hat das Zeichen ^Z den Wert 0x1A.
Was das im Kontext der CSV-Dateien bedeuten soll, weiss ich nicht.
Ich kann auch nicht sagen, ob hier Emacs irgendwie reinpusht. Das koenntest du aber testen, indem du dir die letzten paar Bytes der Datei mit `od' anzeigst:
Code: Alles auswählen
tail -c 5 foo.csv | od -c
Use ed once in a while!
Re: Was bedeutet "^Z"?
Das ist genau das was du beobachtest, das Ende der Datei (End of File = "EOF"):
https://en.wikipedia.org/wiki/ASCII#End_of_file/stream
https://en.wikipedia.org/wiki/ASCII#End_of_file/stream
Re: Was bedeutet "^Z"?
Ah, danke.
Das sind die letzten 5 Zeichen in oktal.
In geany wird das letzte Zeichen als "SUB" dargestellt, so wie auch im verlinkten Wiki Artikel beschrieben.
Per Geany entferne ich das Zeichen und kann danach die CSV Datei auch problemlos lesen.
Andernfalls wird die letzte Zeile, eben nicht als leere Zeile (also das Ende einer Datei), sondern als Zeile mit einem weiteren Zeichen (SUB) interpretiert.
Ich habe diverse anderen Dateien überprüft. Dort tauch ^Z nicht auf.
OK, es ergibt im ersten Moment Sinn, dass es dort steht, wenn es end-of-file bedeuten soll. Aber warum haben andere files dass dort dann nicht?
Das sind die letzten 5 Zeichen in oktal.
Code: Alles auswählen
0000000 2 0 \r \n 032
0000005
Per Geany entferne ich das Zeichen und kann danach die CSV Datei auch problemlos lesen.
Andernfalls wird die letzte Zeile, eben nicht als leere Zeile (also das Ende einer Datei), sondern als Zeile mit einem weiteren Zeichen (SUB) interpretiert.
Ich habe diverse anderen Dateien überprüft. Dort tauch ^Z nicht auf.
OK, es ergibt im ersten Moment Sinn, dass es dort steht, wenn es end-of-file bedeuten soll. Aber warum haben andere files dass dort dann nicht?
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (backintime)
Teil des Upstream Betreuer Teams von Back In Time (backintime)
Re: Was bedeutet "^Z"?
Das ist halt wie bei Byteorder-Marks, die Windowsprogramme in UTF-8 kodierte Textdateien einfuegen: Das ist letztlich Metainformation und nicht Teil der eigentlichen Inhaltsinformation der Datei, obgleich sie dort drin steht.buhtz hat geschrieben:11.10.2022 14:54:59OK, es ergibt im ersten Moment Sinn, dass es dort steht, wenn es end-of-file bedeuten soll. Aber warum haben andere files dass dort dann nicht?
Warum in manchen deiner Dateien ^Z am Ende vorhanden ist, kann man ohne Kontext nicht sagen. Das kann man hoechstens davon ableiten, mit welchen Programmen diese erzeugt worden sind, aus welcher Zeit die stammen, mit welchen Programmiersprachen sie geschrieben worden sind, in welche Computerkultur sie gehoeren, usw. Ich wuerde so ein ^Z eher in vergangenen Jahrzehnten verorten.
In deinem Fall wuerde ich einfach ein kleines Reparaturscript schreiben, das diese Zeichen aus den Dateien entfernt, bevor du sie einliest.
Use ed once in a while!