[Gelöst] Was bedeutet "^Z"?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
buhtz
Beiträge: 1105
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

[Gelöst] Was bedeutet "^Z"?

Beitrag von buhtz » 11.10.2022 14:24:36

Ich habe diverse CSV Dateien die ein ^Z (laut Darstellung von Debianemacs) 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?
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 (Debianbackintime)

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Was bedeutet "^Z"?

Beitrag von Meillo » 11.10.2022 14:37:22

^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:

Code: Alles auswählen

tail -c 5 foo.csv | od -c
Dort sollte dann eine 032 auf tauchen (das die Oktaldarstellung von 0x1A ist).
Use ed once in a while!

Benutzeravatar
hikaru
Moderator
Beiträge: 13585
Registriert: 09.04.2008 12:48:59

Re: Was bedeutet "^Z"?

Beitrag von hikaru » 11.10.2022 14:48:13

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

buhtz
Beiträge: 1105
Registriert: 04.12.2015 17:54:49
Kontaktdaten:

Re: Was bedeutet "^Z"?

Beitrag von buhtz » 11.10.2022 14:54:59

Ah, danke.

Das sind die letzten 5 Zeichen in oktal.

Code: Alles auswählen

0000000   2   0  \r  \n 032
0000005
In Debiangeany 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?
Debian 11 & 12; Desktop-PC, Headless-NAS, Raspberry Pi 4
Teil des Upstream Betreuer Teams von Back In Time (Debianbackintime)

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Was bedeutet "^Z"?

Beitrag von Meillo » 11.10.2022 15:08:18

buhtz hat geschrieben: ↑ zum Beitrag ↑
11.10.2022 14:54:59
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 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.

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!

Antworten