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. :lol:

Re: Crossplatform Zeilenumbruch

Verfasst: 14.08.2018 12:48
von Imhotheb
Und das nach nur 10, 15 , 20 Jahren ? :praise: :praise: :praise:

Re: Crossplatform Zeilenumbruch

Verfasst: 14.08.2018 13:08
von Qnode
Prima, das hilft mir weiter. Vielen Dank!