Seite 1 von 2

Problem ReadString

Verfasst: 10.05.2014 18:17
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 ?

Re: Problem ReadString

Verfasst: 10.05.2014 18:34
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.

Re: Problem ReadString

Verfasst: 10.05.2014 18:36
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.

Re: Problem ReadString

Verfasst: 10.05.2014 18:44
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.

Re: Problem ReadString

Verfasst: 10.05.2014 19:01
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 ?

Re: Problem ReadString

Verfasst: 10.05.2014 19:02
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

Re: Problem ReadString

Verfasst: 10.05.2014 19:12
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 ?

Re: Problem ReadString

Verfasst: 10.05.2014 19:13
von NicTheQuick
Vermutlich stimmen nur die Zeilenumbrüche nicht.

Re: Problem ReadString

Verfasst: 10.05.2014 19:21
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

Re: Problem ReadString

Verfasst: 10.05.2014 19:40
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)

?