2 ärgerliche Fälle kein Linuxprogramm fertigzukriegen

Anfängerfragen zum Programmieren mit PureBasic.
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Re: 2 ärgerliche Fälle kein Linuxprogramm fertigzukriegen

Beitrag von DarkDragon »

Heinz Mendax hat geschrieben: 17.05.2023 00:44 Bild
Wie #NULL & NicTheQuick schon schrieben, safoall.ttf existiert nicht. Safoall.ttf mit großem S jedoch schon. Das hat nichts mit PureBasic zu tun, eher mit dem Dateisystem deiner Partition und Linux. Wenn du Groß-/Kleinschreibung ignorieren willst formatiere die Partition in NTFS oder FAT.
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: 2 ärgerliche Fälle kein Linuxprogramm fertigzukriegen

Beitrag von mk-soft »

Path.s = "/home/peter/Safoall.ttf"
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: 2 ärgerliche Fälle kein Linuxprogramm fertigzukriegen

Beitrag von mk-soft »

Bloss nicht auf NTFS oder FAT formatieren. Sonst funktioniert nicht mehr alles korrekt (Berechtigungen, etc)
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Heinz Mendax
Beiträge: 50
Registriert: 29.03.2013 12:25
Wohnort: Eisenach

Re: 2 ärgerliche Fälle kein Linuxprogramm fertigzukriegen

Beitrag von Heinz Mendax »

Hallo !
Ich muß mich schämen,daß trotz Hinweis zum Gross-Kleinschreiben ich irgendwie diesen Fehler nicht gesehen habe. Nachdem
ich die Schriftdatei einheitlich kleingeschrieben überall eingesetzt hatte, lief auch der Includebinary- Aufruf. Allerdings wurde die
richtige Schrift im Programm auf den Buttons nicht angezeigt, sondern eine Ersatzschriftart. Das Ganze funktioniert jetzt, nachdem
die Procedur Rebuilt_FontFile_From_DataSection() eingesetzt worden ist. Vielen Dank allen, die sich hier Gedanken gemacht haben.
Das andere Problem habe ich bis jetzt nicht lösen können (Dateilesen zeilenweise ohne korrekte EOF-Feststellung). Ich mache es jetzt
ohne EOF-Abfrage, indem ich beim Schreiben die Zeilen zähle und beim Lesen nur diese Zahl einhalte.

Heinz
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: 2 ärgerliche Fälle kein Linuxprogramm fertigzukriegen

Beitrag von mk-soft »

Mal eine Hilfsfunktion wie man so was lösen kann.

Code: Alles auswählen

;-TOP 
; Read And Write TextFile by mk-soft, v1.02, 28.03.2020

EnableExplicit

Procedure ReadFileToList(FileName.s, List TextList.s()) ; Result Format (BOM)
  Protected file, format
  
  ClearList(TextList())
  
  file = ReadFile(#PB_Any, FileName)
  If file = 0
    Debug "Error Open File: " + FileName
    ProcedureReturn 0
  EndIf
  
  format = ReadStringFormat(file)
  If format = 0
    Debug "Error Read BOM: " + FileName
    CloseFile(file)
    ProcedureReturn 0
  EndIf
  
  While Not Eof(file)
    AddElement(TextList())
    TextList() = ReadString(file, format)
  Wend
  
  CloseFile(file)
  
  ProcedureReturn format
  
EndProcedure

; ----

Procedure WriteFileFromList(FileName.s, List TextList.s(), Format = #PB_UTF8) ; Result wrote lines
  Protected file, cnt
  
  If Format <> #PB_Ascii And Format <> #PB_UTF8 And Format <> #PB_Unicode
    Debug "Error BOM not supported: " + FileName
    ProcedureReturn 0
  EndIf
  
  file = CreateFile(#PB_Any, FileName, Format)
  If file = 0
    Debug "Error Create File: " + FileName
    ProcedureReturn 0
  EndIf
  
  If WriteStringFormat(file, Format) = 0
    Debug "Error Write BOM: " + FileName
    CloseFile(file)
    ProcedureReturn 0
  EndIf
    
  ForEach TextList()
    If WriteStringN(file, TextList()) = 0
      Debug "Error Write Line: " + FileName
      CloseFile(file)
      ProcedureReturn 0
    Else
      cnt + 1
    EndIf
  Next
  
  CloseFile(file)
  
  ProcedureReturn cnt
  
EndProcedure

; ****

Global NewList Text.s()

Define filename.s, bom

; Read CSV to text list
filename.s = OpenFileRequester("Open", "", "", 0)
If filename
  bom = ReadFileToList(filename, Text())
  Debug "BOM = " + bom
EndIf

ForEach Text()
  Debug Text()
Next
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8807
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Re: 2 ärgerliche Fälle kein Linuxprogramm fertigzukriegen

Beitrag von NicTheQuick »

@mk-soft:
Kurzer Hinweis dazu:

Code: Alles auswählen

  format = ReadStringFormat(file)
  If format = 0
    Debug "Error Read BOM: " + FileName
    CloseFile(file)
    ProcedureReturn 0
  EndIf
Eigentlich kann ReadStringFormat() keine 0 zurückgeben. Der Default wird immer #PB_Ascii sein, zumindest laut Hilfe. Man könnte an der Stelle allerdings überprüfen, ob das Format eins von #PB_Ascii, #PB_UTF8 oder #PB_Unicode ist. In allen anderen Fällen kannst du das Format nicht an ReadString() weitergeben.
Antworten