Problem ReadString

Anfängerfragen zum Programmieren mit PureBasic.
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

Problem ReadString

Beitrag von schleicher »

Ich möchte Dateien (Unix,UTF8) in einem Editorgadget editieren . Dazu wird die Datei in den Windows Temp Ordner kopiert. Soweit sogut

Jedoch bekomme ich mit

Code: Alles auswählen

Procedure.s DownloadFile()

 If ReadFile(1,tempdir$  + Liste.s()\nom.s)
    While Eof(1)=0
      editfile$=ReadString(1)
       
    Wend
    CloseFile(1)
    
    
  EndIf
  ProcedureReturn editfile$ 

EndProcedure

leider nicht den Inhalt der Datei ins Editorgadget . Liegt es am Format ? Auch debug zeigt kein Ergebnis. Nur bei einer Datei erhalte ich den Inhalt und da auch nur 4 Zeilen anstatt 8. Die anderen werden einfach weggelassen.
Wie kann ich das machen, das ich jede Datei in den Edidtorgadget bekomme ?
Purebasic 5.51
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
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: Problem ReadString

Beitrag von NicTheQuick »

Das ist ein unvollständiger Code. Den kann man schlecht testen.

Auf den ersten Blick sieht aber 'Liste.s()\nom.s' schon mal sehr komisch aus. 'Liste()' ist ja wohl kein String, immerhin hat sie eine Struktur.

Und dann liest du in der Schleife zwar alle Zeilen der Datei aus, aber am Ende bleibt ja nur die letzte Zeile in "editfile$" gespeichert.
Benutzeravatar
TroaX
Beiträge: 684
Registriert: 08.03.2013 14:27
Computerausstattung: PC: Ryzen 9 3950X, 96 GB RAM, RX6800XT, 2.5 TB SSD, 21:9 Display, Linux Mint | Lappi: Ryzen 7 5800H, 16 GB RAM, 1 TB SSD, Linux Mint
Wohnort: NRW
Kontaktdaten:

Re: Problem ReadString

Beitrag von TroaX »

Versuche es mal so:

Code: Alles auswählen

Procedure.s DownloadFile()

 If ReadFile(1,tempdir$  + Liste.s()\nom.s)

    editfile$ = ""

    While Eof(1) = 0
      editfile$ = editfile$ + ReadString(1)
    Wend

    CloseFile(1)

  EndIf
  ProcedureReturn editfile$

EndProcedure
In der Schleife gehst du Position für Position durch und wenn die letzte ein Leerzeichen/Leerzeile ist, dann ist das Gadget natürlich leer.
PC: Ryzen 9 3950X | 96 GB RAM | RX6800XT | 2,5 TB NVMe | Linux Mint
Notebook: 16" 3:2 | Ryzen 7 5800H | 16 GB RAM | Radeon Vega | 1TB NVMe | Linux Mint
NAS: Fritz.Box 5690 Pro (Nur für Keepass-DB)
Coding: Purebasic, Spiderbasic, GDevelop, Javascript/Node
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Problem ReadString

Beitrag von RSBasic »

Außerdem empfehle ich dir bei größeren Dateien mit ReadData() die komplette Datei aufeinmal in den Speicher zu laden. Damit geht es auf jeden Fall schneller, wenn du größere Dateien laden möchtest.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

Re: Problem ReadString

Beitrag von schleicher »

Das funktioniert ein klein wenig besser, aber im Editorgadget ist alles auf eine Zeile. Zumdem liest er mir nur eine
Datei ein. Bei alle anderen Dateien kommt garnichts .



Irgendwie komisch. Wie geht das mit ReadData() ?

Wie kann ich es machen das die Leerzeilen/Leerzeichen mit übernommen werden ?
Purebasic 5.51
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Problem ReadString

Beitrag von ts-soft »

Um das Format zu unterstützen:

Code: Alles auswählen

EnableExplicit

Procedure.s MyReadFile(File.s)
  Protected FF, Format, Result.s
  
  FF = ReadFile(#PB_Any, File)
  If FF
    Format = ReadStringFormat(FF)
    While Not Eof(FF)
      Result + ReadString(FF, Format)
    Wend
    CloseFile(FF)
  EndIf
  
  ProcedureReturn Result
EndProcedure
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

Re: Problem ReadString

Beitrag von schleicher »

Ja das hatte ich hier im Board auch schon gefunden und ausprobiert.
Dann liegt das Problem wohl doch an den Leerzeichen oder Leere Zeilen, das im Editorgadget nichts erscheint.

Auch mit ReadData hatte ich schon probiert, aber da bin ich als blutiger Anfänger an meinem Latein gescheitert.
Ich habs zwar in den Speicher bekommen, aber wie weiter bis zum Editorgadget ?
Purebasic 5.51
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
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: Problem ReadString

Beitrag von NicTheQuick »

Vermutlich stimmen nur die Zeilenumbrüche nicht.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Problem ReadString

Beitrag von ts-soft »

Code: Alles auswählen

EnableExplicit

Procedure.s MyReadFile(File.s)
  Protected FF, Format, Result.s
 
  FF = ReadFile(#PB_Any, File)
  If FF
    Format = ReadStringFormat(FF)
    While Not Eof(FF)
      Result + ReadString(FF, Format) + #LF$
    Wend
    CloseFile(FF)
  EndIf
 
  ProcedureReturn Result
EndProcedure

OpenWindow(0, #PB_Ignore, #PB_Ignore, 640, 480, "")
EditorGadget(0, 10, 10, 620, 460)

Define myFile.s = #PB_Compiler_Home + "SDK\Readme.txt" ; hier anpassen

Define Text.s = MyReadFile(myFile)
SetGadgetText(0, Text)

Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
schleicher
Beiträge: 214
Registriert: 30.03.2014 19:57
Computerausstattung: Purebasic 5.70
Wohnort: 18314 Löbnitz

Re: Problem ReadString

Beitrag von schleicher »

Vielen Dank. das war die Lösung . :allright:


Wenn ich jetzt die Datei editiere muss ich dafür sorgen, das sie auch in dem ursprünglichen Format bleibt beim speichern. Genügt da :

ScintillaSendMessage(#Editor_0, #SCI_SETEOLMODE, #SC_EOL_LF)

?
Purebasic 5.51
Antworten