nach wie vor habe ich Probleme mit umfangreichem Zahlenmaterial in Dateien, die für Lottosysteme weiter ver- und bearbeitet werden müssen.
Ich betreibe eine kostenlose System-Homepage und bekomme zu meinen eigenen aus aller Welt Lottosysteme zugeschickt.
Diese müssen auf Gewinne usw. überprüft werden. Sie werden mir in den unterschiedlichsten Formaten zur Verfügung gestellt.
Nicht alle haben, wie in Deutschland, 6 Zahlen pro Reihe.
So habe ich mir im Laufe der Zeit einige Tools geschrieben, die auch einwandfrei funktionieren, mit einer Ausnahme.
Nachstehend ist ein kleines Beispiel, welches mein Problem darstellen soll. (Ich weiß, es gibt bessere Methoden, Systeme zu überprüfen, aber alles verraten sollte man ja auch nicht)
Das folgende Beispiel erstellt erst ein Vollsystem aus 8 Zahlen in 28 Reihen. Diese werden in eine Datei geschrieben.
Anschließend soll die Reihenanzahl und die Zahlen pro Reihe überprüft werden.
Wenn ich das Programm starte, wird es nicht beendet, sondern läuft endlos weiter.
In die Datei wird geschrieben und auch die Reiheanzahl kann ich mir mit Debug ausgeben lassen.
Gehe ich jetzt aber hin und deaktiviere die Procedure Vollsystem erstellen,
das befindet sich ja nach dem ersten Lauf auf der Platte, öffne diese Datei,
klicke hinter das letzte Zeichen der letzten Reihe und drücke ein- oder mehrmals die Taste ENTF, speichere das System wieder ab, starte neu, läuft es bis zum Ende durch.
Der Fehler könnte also ggf. am WriteStringN liegen. Der gleiche Fehler erscheint aber auch, wenn ich fremde Systeme verarbeiten möchte.
Einen Teil der Überprüfungen könnte ich mit Fremdprogrammen vornehmen, da funktioniert das aber.
Also muß der Fehler an mir oder PureBasic liegen.
Weiß jemand einen Rat?
Ich benutze die Vollversion PB 4.01
Gruß
WeEf
hier ein Code-Beispiel:
Code: Alles auswählen
Global Reihe.l
Global Dim PZ(10000)
Procedure ErstellenVollsystem()
v = 8
If OpenFile(0, "Ergebnis.txt")
For Zahl1= 1 To v - 5
For Zahl2=Zahl1+1 To v - 4
For Zahl3=Zahl2+1 To v - 3
For Zahl4=Zahl3+1 To v - 2
For Zahl5=Zahl4+1 To v - 1
For Zahl6=Zahl5+1 To v
i=i+1 : WriteStringN(0," " + RSet(Str(Zahl1),2,"0") + " " + RSet(Str(Zahl2),2,"0") + " " + RSet(Str(Zahl3),2,"0")+ " " +RSet(Str(Zahl4),2,"0") + " " + RSet(Str(Zahl5),2,"0") + " " + RSet(Str(Zahl6),2,"0"))
Next
Next
Next
Next
Next
Next
CloseFile(0)
EndIf
EndProcedure
Procedure.l GetAscNum()
EODF.l=0
Outp.l=0
Inp.l=0
Repeat
inp = ReadByte(0)
Until inp >= 48 And inp <= 57
outp = (inp-48)
Repeat
inp = ReadByte(0)
If inp >= 48 And inp <= 57
outp * 10
outp + (inp-48)
Else
EODF = 1
EndIf
Until EODF = 1
ProcedureReturn(outp)
EndProcedure
Procedure Reihen()
;Reihenanzahl überprüfen
Reihe.l=0
Dummy.s=""
If ReadFile(0,"Ergebnis.txt")
Reihe.l=0
Repeat
Reihe.l=Reihe.l+1
Dummy.s=ReadString(0)
Until Eof(0)
CloseFile(0)
EndIf
EndProcedure
;Ende Reihenanzahl überprüfen
Procedure ZahlenProReihe()
If ReadFile(0,"Ergebnis.txt")
x=0
While Eof(0)=0
x+1
PZ(x)=GetAscNum()
Wend
GespielteZahlen=x/Reihe
EndIf
CloseFile(0)
EndProcedure
ErstellenVollsystem()
Reihen()
ZahlenProReihe()
MessageRequester("Info", "Programmende