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 .
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)
?