Seite 1 von 2
[Gelöst] Crossplatform Zeilenumbruch
Verfasst: 14.08.2018 08:31
von Qnode
Hey,
die Frage ist mir ehrlich gesagt etwas peinlich, aber ich habe nix Befriedigendes dazu gefunden.
Es geht einfach darum, Strings ,die Zeilenumbrüche enthalten, Cross-Platform-Fähig zu machen. Die OS verwenden ja dafür unterschiedliche Zeichen. Bei Purebasic bin ich bisher nur auf CRLF$ gestoßen, von dem ich ausgehe, dass es den Windowszeilenumbruch darstellt (CarriageReturn LineFeed). Ich hatte gehofft, irgendwas zu finden, dass automatisch das richtige Zeilenende einfügt, bin aber nicht fündig geworden. Gibt es sowas?
Ansonsten würde ich z.B. sowas versuchen (schnell eingehackt und nicht ausgetestet):
Code: Alles auswählen
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
#Zeilenumbruch = Chr(10)
CompilerElseIf #PB_Compiler_OS = #PB_OS_MacOS
#Zeilenumbruch = Chr(13)
CompilerElse
#Zeilenumbruch = #CRLF$
CompilerEndIf
Re: Crossplatform Zeilenumbruch
Verfasst: 14.08.2018 09:19
von TroaX
Code: Alles auswählen
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
#EOL = #LF$
CompilerElseIf #PB_Compiler_OS = #PB_OS_MacOS
#EOL = #CR$
CompilerElse
#EOL = #CRLF$
CompilerEndIf
Ich würde es auch nicht anders machen. Allerdings würde ich immer für soetwas eine kurze Konstante nehmen. So wäre die Code-Übersicht mit der Zeit besser.
Re: Crossplatform Zeilenumbruch
Verfasst: 14.08.2018 09:21
von Nino
Qnode hat geschrieben:Ich hatte gehofft, irgendwas zu finden, dass automatisch das richtige Zeilenende einfügt, bin aber nicht fündig geworden. Gibt es sowas?
Leider nicht.
Ich habe mir folgendes in der IDE als Baustein gespeichert ("NL" steht für "new line"):
Code: Alles auswählen
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
#NL$ = #CRLF$
CompilerElse
#NL$ = #LF$
CompilerEndIf
Nur die älteren Versionen von Mac OS verwenden #CR$ (= Chr(13)) als Zeilenumbruch. Die neueren Versionen verwenden #LF$, wie bei Linux.
Re: Crossplatform Zeilenumbruch
Verfasst: 14.08.2018 09:26
von Shardik
Nino hat geschrieben:Nur die älteren Versionen von Mac OS verwenden #CR$ (= Chr(13)) als Zeilenumbruch. Die neueren Versionen verwenden #LF$, wie bei Linux.
Noch etwas genauer:
Wikipedia hat geschrieben:Bei Mac OS X finden sich aufgrund der weitgehenden Kompatibilität zum Vorgänger Mac OS noch einige Textformate, die CR statt LF als Zeilentrenner verwenden. Viele moderne Mac OS X-Programme können daher mit beiden Formaten in Textdateien umgehen. Bei der Verwendung von falsch deklarierten Dateien, die CR LF verwenden, führt dies bei einigen Programmen dazu, dass Zeilenumbrüche doppelt erzeugt werden. Lediglich Dateien, die aus der BSD- bzw. Unix-Welt stammen, sind meist zwingend an LF als Zeilentrenner gebunden.
Re: Crossplatform Zeilenumbruch
Verfasst: 14.08.2018 09:28
von Josh
Ich hab das im englischen Forum schon mal angeregt. Siehe
hier
Re: Crossplatform Zeilenumbruch
Verfasst: 14.08.2018 09:39
von Nino
Shardik hat geschrieben:Noch etwas genauer:
Vielen Dank für die Präzisierung und Ergänzung!
Re: Crossplatform Zeilenumbruch
Verfasst: 14.08.2018 10:47
von Imhotheb
Meisten reicht bei Windows auch ein #LF$ ... z.B. beim Messagerequester (MessageRequester("Test", "Test mit " + #LF$ + "Umbruch") ) ... nur leider nicht immer
Re: Crossplatform Zeilenumbruch
Verfasst: 14.08.2018 12:41
von NicTheQuick
Das neuste Windows
Notepad kann nun endlich auch Linefeeds, ohne dass man erst Notepad++ oder ähnliches installieren muss.

Re: Crossplatform Zeilenumbruch
Verfasst: 14.08.2018 12:48
von Imhotheb
Re: Crossplatform Zeilenumbruch
Verfasst: 14.08.2018 13:08
von Qnode
Prima, das hilft mir weiter. Vielen Dank!