Probleme mit writeline
Übersicht

102030Betreff: Probleme mit writeline |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
Ich mach hier ein Programm, welches Vokabeln abfragt. Es sind Vokabeln im Fach 1, 2 und 3. immer wenn die Vokabel richtig ist, kommt sie ein Fach weiter, aber wenn man sie falsch schreibt, kommt sie wieder in das erste Fach. Nun habe ich folgende Probleme: ![]() wird sie nochmal ins Fach 1 geschrieben. ![]() der Eintrag im Fach, in dem sie war auch nicht gelöscht und sie wird nicht ins nächst Fach geschrieben. Code: [AUSKLAPPEN] Function button_frage_func() button_frage_auslesen_func For voc.Vokabel=Each Vokabel If Eingabe(win,50,50,Voc\Deutsch,False)=Voc\Englisch Then Voc\fach=Voc\fach+1 Notify"Richtig!" Else Notify"Falsch"+Chr$(13)+""+Chr$(13)+"Die richtige Antwort lautet:"+Chr$(13)+""+Voc\Englisch+"" Voc\fach=1 EndIf Next For Voc.Vokabel=Each Vokabel For i=1 To 3 Datei=OpenFile("Daten/Fach "+i+"/Vokabeln.voc") While Not Eof(Datei) a=ReadLine(datei) Wend If Voc\fach=i Then WriteLine(Datei,Voc\Deutsch) WriteLine(Datei,Voc\Englisch) WriteLine(Datei,Datum_berechnen(i)) EndIf CloseFile(Datei) Next Delete Voc Next End Function ;----------------------------------------------------------------------------------------------------- Function button_frage_auslesen_func() For i=1 To 3 Datei=OpenFile("Daten/Fach "+i+"/Vokabeln.voc") While Not Eof(Datei) Deutsch$=ReadLine(Datei) Englisch$=ReadLine(Datei) Datum_alt$=ReadLine(datei) Tag_alt=Mid(Datum_alt,1,2) Monat_alt$=Mid(Datum_alt,4,3) jahr_alt=Mid(Datum_alt,9,4) Datum_neu$=CurrentDate() Tag_neu=Mid(datum_neu,1,2) Monat_neu$=Mid(Datum_neu,4,3) Jahr_neu=Mid(Datum_neu,9,4) For i=0 To 11 If monat_alt=monate(i) Then monat_zahl_alt=i Next For i=0 To 11 If monat_neu=monate(i) Then monat_zahl_neu=i Next If Jahr_alt<=Jahr_neu Then If monat_zahl_alt<=Monat_zahl_neu Then If tag_alt<=tag_neu Then Voc.Vokabel=New Vokabel Voc\Deutsch=Deutsch Voc\Englisch=Englisch Voc\fach=i EndIf EndIf EndIf Wend CloseFile(datei) Next End Function Kann mir jemand helfen? |
||
![]() |
Pokoyo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi, ich glaube writeline ist hier nicht das Problem ![]() Du solltest die Sache anders angehen. Erstell dir ein paar stringarrays und lies die komplette Datei ein. Anschliessend kannst du deine Berechnungen bzw. Entscheidungen welche Vokabel in welches Fach gehört innerhalb der Arrays hin und herschieben. Danach wieder in die Datei schreiben. Dann hast du eine saubere Trennung der Funktionen und dein Code wird um einiges Übersichtlicher. mfg Pokoyo |
||
|Win10 64bit|FX 8350@4,5 GHz|Asrock 990FX Killer Fatality|16GB HyperX|R9 290X|Blitz3D|BlitzMax| |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
na, du müssest beim zurückschreiben erst einmal suchen, ob das Wort bereits in der Datei enthalten ist und auf jeden Fall erst einmal löschen. Das ist so wie du begonnen hast mit 3 Karteikästen sehr umstänldich zu bewerkstelligen.
Harmlose Lösung Vielleicht wäre es sogar wesentlich schneller, wenn du jedesmal die gesamte Wortliste neu schreibst.... Also einfach alte Datei überschreiben mit allen Worten, die in die neue Datei gehören: BlitzBasic: [AUSKLAPPEN] For Voc.Vokabel=Each Vokabel dazu ist es natürlich nötig ganz am Anfang des Programms alle Vokabeln in den Rechner zu holen. Dies gibt auch bei 10.000 Vokabeln noch keine Speicherprobleme. Welche Du dann drannimmst entscheidest du dann quasi erst aus dem RAM. Das ist deutlich schneller und schont die Platte. Ausblick Eine komplett andere Möglichkeit wären feste Datensatzgrößen. Hierbei werden alle Daten die zu speichern sind auf eine max. Länge gebracht. z.b. as Datum auf 10 Stellen, die Worte selbst vielleicht auf 30 Stellen. Notfalls mit Leerzeichen füllen. Alle Daten eines Satzes werden zu einem String verbunden. Dann wird jeden Datensatz noch eine laufende Nummer verpasst. Da jetzt jeder Datensatz 10+30+30=70 (tipp: mach gleich 99 für Erweiterungen) Bytes groß ist, kannst Du die Datei öffnen und gezielt einen Datensatz mit FILESEEK herauspicken alle Codes nur symbolisch: BlitzBasic: [AUSKLAPPEN] FileSeek Datei, DatenSatzNr*100 Ebenso bequem lässt er sich wieder zurückschreiben. BlitzBasic: [AUSKLAPPEN] FileSeek Datei, DatenSatzNr*100 Spätestens hier machen drei Dateien für die Karteikästen 1,2 und 3 keinen Sinn mehr. Packe alle Worte in eine einzige Datei und geben jeden Satz lieber noch eine Variable Voc\KarteiKasten% mit. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group