![]() |
#13#10 oder doch #10#13
Hi!
Ich habe eine Frage an euch: Normalerweise ist der "Befehl" für eine neue Zeile doch #13#10 also die "Chars" 13 und 10 in ebendieser Reihenfolge... Jetzt habe ich hier ein Gerät, dass mir über ComPort Ausgaben schickt. Dort kommen die Zeilenumbrüche, aber als #10#13, was z.B. von einem Memo nicht richtig interpretiert wird. Daher folgende Frage: *) Was ist jetzt eigentlich richtig? Ciao Frederic |
Re: #13#10 oder doch #10#13
"Richtig" ist alles oder nicht, je nach Sichtweise. Dein Text wird zunächst mal als Datenblock gesehen, meinetwegen noch als Aneinandereihung von (ASCII)-Zeichen. Zeilen existieren dagegen nur in unserer Vorstellung und werden durch Steuerzeichen dargestellt. Doch das geschieht nicht einheitlich, während unter Windows die Kombination eines Carriage Return und eines Line Feeds (in dieser Reihenfolge, also erst #13, dann #10), wird unter den meisten Unixen lediglich der Line Feed verwendet (#10), unter MacOS wird dagegene der Carriage Return verwendet (#13).
Wenn jetzt dein externes Gerät #10#13 verwendet, kann es dies ruhig tun, falsch ist es nicht, und solange es konsistent ist, ist es nicht wirklich ein Problem, da du ja ein StringReplace anwenden kannst. |
Re: #13#10 oder doch #10#13
Hi!
Es ist leider nicht durchgängig so... Solange das Gerät in seinem "Betriebsystem" ist, wird #10#13 geschickt, läuft meine Anwendung (in C geschrieben) ergibt printf mit \n ein #13#10 Ich bekomme vom ComPort die Zeichen ja einzeln, wie soll ich da ein Str-Replace machen? Und wo kommt #10#13 her? Es ist ja lt. Konvention weder Linux, Unix, Mac, Windows oder sonst was... Ciao Frederic |
Re: #13#10 oder doch #10#13
Sammel die Zeichen erst in einem Buffer, und nutze dann StrReplace(Buffer,'#10#13','#13#10'). Diese Reihenfolge kann übrigens überall herkommen, das ist ja reine Definitionssache. Frag am besten mal den Hersteller des Gerätes.
|
Re: #13#10 oder doch #10#13
:zwinker: Geschichte:
#13 = Wagen Rücklauf (Schreibmachine, Drucker) - Zurück auf das erste Spalte #10 = Zeilen Vorschub (Schreibmachine, Drucker) - Nächste Zeile "\n" ist doch bereits #13#10 in C oder ? ...So hab mein Beispiel weggemacht, wiedermal zu langsam. |
Re: #13#10 oder doch #10#13
Hi Frederic,
die Festlegung, dass CR und LF zusammen als Trenner von Textzeilen fungieren, ist historisch bedingt und deshalb für viele noch nachvollziehbar. Bei der mechanischen Schreibmaschine war die Reihenfolge übrigens von der Kraft abhängig, mit der man den Wagen zurückfuhr. Ich denke, du solltest beim zeichenweisen Empfang unter Windows bei jedem LF (#10) zuerst ein CR (#13) weitergeben und jedes eingehende CR einfach vernichten. Grüße vom marabu |
Re: #13#10 oder doch #10#13
Zitat:
Delphi-Quellcode:
die Konstante sLineBreak wird in der Unit System deklariert und beinhaltet unter Windows die Zeichenfolge #13#10 ...
Buffer:=StringReplace(Buffer,#10#13,sLineBreak,[rfreplaceall]);
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz