Seite 1 von 1
Einträge aus einem ListIconGadget löschen und speichern...?
Verfasst: 11.10.2005 17:30
von satzzeichen
Hi Leute,
ich arbeite im moment an einer Art "Adressbuch". Man kann Einträge reinmachen/rausmachen/ändern und das ganze wird in einer .dat Datei gespeichert. Nur habe ich das Problem, dass wenn ich einen Eintrag lösche dann wird das ganze nicht korrekt abgespeichert
Hier der Code. . .
Code: Alles auswählen
Procedure EintragEntfernen()
If GetGadgetState(0) > -1
RemoveGadgetItem(0, GetGadgetState(0))
DelFiles.l + 1
Else
MessageRequester("Bitte Eintrag auswählen!","Um einen Eintrag zu entfernen müssen sie ihn zuerst anwählen.")
EndIf
EndProcedure
Procedure ProgramBeenden()
;-Notizzettel speichern
OpenFile(0, "notiz.dat")
notiz$ = GetGadgetText(9)
WriteString(notiz$)
CloseFile(0)
;-Adressliste speichern
If CountGadgetItems(0) > -1
CreateFile(2, "Eigene Adressliste.dat")
OpenFile(3,"Eigene Adressliste.dat")
ListEnd = CountGadgetItems(0)
For DoIt = 0 To ListEnd
SpeichernText1$ = GetGadgetItemText(0, DoIt, 0)
SpeichernText2$ = GetGadgetItemText(0, DoIt, 1)
SpeichernText3$ = GetGadgetItemText(0, DoIt, 2)
SpeichernText4$ = GetGadgetItemText(0, DoIt, 3)
SpeichernText5$ = GetGadgetItemText(0, DoIt, 4)
SpeichernText6$ = GetGadgetItemText(0, DoIt, 5)
;For Loop = 0 To 5
; SpeichernText$(Loop) = GetGadgetItemText(0,DoIt,Loop)
;Next
If SpeichernText1$ = "" And SpeichernText2$ = "" And SpeichernText3$ = "" And SpeichernText4$ = "" And SpeichernText5$ = "" And SpeichernText6$ = ""
MessageRequester("","MÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖP")
Else
WriteStringN(SpeichernText1$+Chr(10)+SpeichernText2$+Chr(10)+SpeichernText3$+Chr(10)+SpeichernText4$+Chr(10)+SpeichernText5$+Chr(10)+SpeichernText6$)
EndIf
Next
CloseFile(3)
EndIf
End
EndProcedure
Hoffentlich könnt ihr mir helfen! Fals ihr mehr Infos/Code braucht einfach mal posten
Bei MessageRequester("","MÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖÖP") müsste man die gelöschten Einträge ja rausfiltern können irgendwie aber so richtig klappt das alles nicht
DANKE, Satzzeichen

Re: Einträge aus einem ListIconGadget löschen und speichern.
Verfasst: 11.10.2005 17:42
von Kiffi
Code: Alles auswählen
CreateFile(2, "Eigene Adressliste.dat")
OpenFile(3,"Eigene Adressliste.dat")
für's erste solltest Du das korrigieren.
Das OpenFile() benötigst Du nicht nach einem CreateFile().
Da gibt's einiges an Deinem Code zu optimieren. Dazu schreibe ich später
was.
Grüße ... Kiffi
// Edit
so, hier eine etwas optimierte Version der Speicherroutine. Falls noch
etwas unklar sein sollte, dann schreib ruhig.
Code: Alles auswählen
;-Adressliste speichern
FF = CreateFile(#PB_Any, "Eigene Adressliste.dat")
If FF
For ZeilenZaehler = 0 To CountGadgetItems(0)
For SpaltenZaehler = 0 To 5
SpeichernText$ + GetGadgetItemText(0, ZeilenZaehler, SpaltenZaehler) + Chr(10)
Next
; Das letzte überflüssige Chr(10) entfernen
SpeichernText$ = Left(SpeichernText$, Len(SpeichernText$) - 1)
WriteStringN(SpeichernText$)
SpeichernText$ = ""
Next
CloseFile(FF)
EndIf
Verfasst: 11.10.2005 18:26
von satzzeichen
für's erste solltest Du das korrigieren.
Das OpenFile() benötigst Du nicht nach einem CreateFile().
Bekomme ich Fehler 0 Plan warum.
Da gibt's einiges an Deinem Code zu optimieren. Dazu schreibe ich später
was.
Das passiert wenn sich ein BlitzBasicer in PB versucht ^^
Grüße ... Kiffi
Grüsse zurück

Jetzt zu deinem verbesserten Code...
-------------------------------------------------------------------------------------
Code: Alles auswählen
; Das letzte überflüssige Chr(10) entfernen
SpeichernText$ = Left(SpeichernText$, Len(SpeichernText$) - 1)
Hab ich da irgendwie noch nie ein letztes überflüssiges Chr(10) gehsehen? (Beispielzeile so wie sie sein sollte in der Adressliste.dat = Gregor Giebenrath|keine|456/12345|3472384732|Möllerstr. 12|Leipzig)
| = Chr(10)
Das war jetzt erstmal was mir so einfällt ich haus gleich nochmal ins PB und probier bisl damit rum.
Verfasst: 11.10.2005 18:29
von satzzeichen
Habs grad gecheckt, dein Code klappt zwar hat aber an dem Urproblem nix geändert!!!!!!!
Verfasst: 11.10.2005 19:46
von Kiffi
> Bekomme ich Fehler 0 Plan warum.
dann solltest Du herausfinden, warum das nicht klappt. Mit OpenFile() auf
ein noch nicht geschlossenes CreateFile() zuzugreifen ist jedenfalls nicht
richtig.
> Hab ich da irgendwie noch nie ein letztes überflüssiges Chr(10) gehsehen?
nicht in Deinem Code sondern in meinem.
Da ich SpeichernText$ in einer Schleife befülle, ist nach dem letzten
Schritt der Schleife ein Chr(10) zuviel vorhanden.
> Habs grad gecheckt, dein Code klappt zwar hat aber an dem Urproblem nix
> geändert!!!!!!!
ein Ausrufezeichen genügt.
Also, folgendes Szenario:
Du hast beispielsweise 10 Einträge in Deinem ListIconGadget und beendest
das Programm. Danach öffnest Du die Datei "Eigene Adressliste.dat" und
siehst: Da sind 10 Zeilen drin. Korrekt?
Danach startest Du Dein Programm noch einmal und löscht einen der 10
Einträge. Programm beenden, "Eigene Adressliste.dat" öffnen. Sind nun
immer noch 10 Zeilen vorhanden?
Grüße ... Kiffi
Verfasst: 12.10.2005 10:13
von Mr.X
Hi zusammen,
ich möchte zu diesem Thema einmal folgende Gedanken spinnen (vielleicht hat auch jemand kurzfristig Zeit das am Programm zu testen):
- erzeugen eines Textfiles mit CREATE
- 10 Zeilen Text schreiben.
- File schließen.
--> OK
- Das vorhandene Textfile mit OPEN öffnen und
- die 10 Zeilen Text (in ein Gadget ein-) lesen.
- File schließen
--> OK
- (im Gadget) eine Textzeile löschen
- Textfile mit OPEN öffnen, da schon existiert.
- 9 Zeilen Text schreiben und
- Textfile schließen.
--> Die ersten 9 Zeilen werden überschrieben, die 10. bleibt aus der alten Version erhalten.
--> Lösung: Hier das Textfile mit CREATE neu erzeugen
Create (1, "File1.DAT")
Open(2, "File1.DAT")
Das erzeugt zwar keinen Fehler, aber ein Schreiben in die Datei benutzt das File 2 (OPEN)
Probieren:
Create(1, "File1.DAT")
Open(2, "File1.DAT")
;- hier Daten schreiben --
Close(2)
Close(1)
Jetzt solte "File1.DAT" leer sein.
CU
Mr.X
Verfasst: 12.10.2005 10:59
von Mr.X
Hi zusammen,
ich habe zu meine theoretischen Ausführungen noch kurz ein Testprogramm geschrieben.
Code: Alles auswählen
OpenConsole()
PrintN(": open file")
;CreateFile(2, "_test.txt")
;OpenFile(1, "_test.txt")
CreateFile(1, "_test.txt")
Print(": write text ")
For i=8 To 12
Print(".")
WriteStringN("Zeile"+Str(i)+" - "+Chr(10)+"Text Text Zeile "+Str(i))
Next
PrintN("")
PrintN(": close file")
CloseFile(1)
;CloseFile(2)
PrintN("")
PrintN("press any key to quit")
Repeat : Until Inkey()
CloseConsole()
1. Runde: openfile (1, "_test.txt") ... closefile(1)
1. Durchlauf: Schleife von 1 ... 10 --> OK
2. Durchlauf: Schleife von 3 .... 8, oder so --> die ersten Zeilen werden überschrieben mit 3 ... 8, die restlichen bleiben.
2. Runde: createfile(1, "_test.txt") ... closefile(1)
1. Durchlauf: Schleife von 1 ... 10 --> OK
2. Durchlauf: Schleife von 3 .... 8, oder so --> OK, die Datei enthält nur die Zeilen 3 ... 8.
3. Runde: createfile(2, "_test.txt") : openfile(1, "_test.txt") : ... : closefile(1) : closefile(2)
--> die Textdatei ist leer - logisch.
Verfasst: 12.10.2005 13:47
von NicTheQuick
Benutz einfach zum Lesen immer [c]ReadFile()[/c] und zum Schreiben immer [c]CreateFile()[/c], dann sollte das funktionieren.
Lies dir mal die Hilfe zu den Befehlen nochmals gründlicher durch.
Verfasst: 12.10.2005 18:47
von satzzeichen
Genau wie Mr.X sich das gedacht hat hab ichs auch gemacht, wollte ja eigentlich nur createfile nehmen aber dann gibts ja Fehler. Konnte noch immer nicht herausfinden warum
Mein Code erstellt ja die Datei neu und öffnet sie dann gleichzeitig? Scheinbar liegt das Problem eher an diesem CreateFile/OpenFile

wieso könnte da ein Fehler kommen?! Und wieso kommt einer, wenn ichs ganz weglasse. . . :/
Hoffe ihr könnt mir noch ein wenig helfen achja. . .
Ich habe zuerst 10 Zeilen, dann lösche ich eine schliese das Program und öffne es erneut ich habe 10 Zeilen wieder ABER die, die ich gelöscht hab hat den Inhalt der vorherigen angenommen! Beispiel:
Zeile1
Zeile2
Zeile3;wird gelöscht
Zeile4
->
Zeile1
Zeile2
Zeile4
Zeile4
MfG Satzzeichen
Verfasst: 12.10.2005 19:23
von Kiffi
> Genau wie Mr.X sich das gedacht hat hab ichs auch gemacht, wollte ja
> eigentlich nur createfile nehmen aber dann gibts ja Fehler. Konnte noch
> immer nicht herausfinden warum
anhand Deiner Fehlerbeschreibung bezweifel ich, dass Du meinen Code
ausprobiert hast, bzw. den Tipp von NicTheQuick gelesen hast.
Grüße ... Kiffi