[Gelöst] Crossplatform Zeilenumbruch

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Qnode
Beiträge: 67
Registriert: 19.07.2018 20:41
Computerausstattung: i5, 16GB RAM, Win10, PureBasic 6.00 (Windows - x64)

[Gelöst] Crossplatform Zeilenumbruch

Beitrag 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
Zuletzt geändert von Qnode am 14.08.2018 13:08, insgesamt 1-mal geändert.
Benutzeravatar
TroaX
Beiträge: 659
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Pop_OS! | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Pop_OS!
Wohnort: NRW
Kontaktdaten:

Re: Crossplatform Zeilenumbruch

Beitrag 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.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Pop_OS!
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Pop_OS!
NAS: Fritz.Box :lol:
Coding: Purebasic 6.04 | PHP | HTML | CSS | Javascript
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Crossplatform Zeilenumbruch

Beitrag 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.
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: Crossplatform Zeilenumbruch

Beitrag 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.
Benutzeravatar
Josh
Beiträge: 1028
Registriert: 04.08.2009 17:24

Re: Crossplatform Zeilenumbruch

Beitrag von Josh »

Ich hab das im englischen Forum schon mal angeregt. Siehe hier
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Crossplatform Zeilenumbruch

Beitrag von Nino »

Shardik hat geschrieben:Noch etwas genauer:
Vielen Dank für die Präzisierung und Ergänzung!
Benutzeravatar
Imhotheb
Beiträge: 192
Registriert: 10.10.2014 13:14
Computerausstattung: Intel 8086, 640 KB RAM, Hercules Video Adapter, 2 x 5 1/4" 360kb Floppy, MS-DOS 3
Wohnort: Wolfenbüttel

Re: Crossplatform Zeilenumbruch

Beitrag von Imhotheb »

Meisten reicht bei Windows auch ein #LF$ ... z.B. beim Messagerequester (MessageRequester("Test", "Test mit " + #LF$ + "Umbruch") ) ... nur leider nicht immer
weil einfach einfach einfach ist ... mach' ich es anders
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8675
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Crossplatform Zeilenumbruch

Beitrag von NicTheQuick »

Das neuste Windows Notepad kann nun endlich auch Linefeeds, ohne dass man erst Notepad++ oder ähnliches installieren muss. :lol:
Bild
Benutzeravatar
Imhotheb
Beiträge: 192
Registriert: 10.10.2014 13:14
Computerausstattung: Intel 8086, 640 KB RAM, Hercules Video Adapter, 2 x 5 1/4" 360kb Floppy, MS-DOS 3
Wohnort: Wolfenbüttel

Re: Crossplatform Zeilenumbruch

Beitrag von Imhotheb »

Und das nach nur 10, 15 , 20 Jahren ? :praise: :praise: :praise:
weil einfach einfach einfach ist ... mach' ich es anders
Benutzeravatar
Qnode
Beiträge: 67
Registriert: 19.07.2018 20:41
Computerausstattung: i5, 16GB RAM, Win10, PureBasic 6.00 (Windows - x64)

Re: Crossplatform Zeilenumbruch

Beitrag von Qnode »

Prima, das hilft mir weiter. Vielen Dank!
Antworten