Seite 1 von 2

Einlesen aus Dateien

Verfasst: 25.01.2006 22:17
von WeEf
Hallo,

ich lese häufig (Lotto)-Zahlen, (Beispiel 01 02 03 04 05 06) aus TXT-Dateien ein, die dann weiter verarbeitet werden sollen. Wenn ich dann die Verarbeitung starte, passiert gar nichts.
Durch suchen habe ich herausgefunden, dass das daran liegen muss, weil der Cursor nicht hinter dem letzten Zeichen der letzten Zeile steht, sondern in einer weiteren Reihe, die leer ist.
Wenn ich von Hand den Cursor hinter das letzte Zeichen setze und einmal die 'Entf'-Taste drücke und abspeichere, läuft alles einwandfrei.
Hat jemand eine Erklärung hierfür oder besser eine Lösung des Problems?

Verfasst: 25.01.2006 22:20
von ts-soft
Wenn Du vielleicht erstmal Deine bisherige Lösung posten könntest, das spart
ne menge Raterei und Postings die nicht zutreffen

Verfasst: 25.01.2006 22:30
von WeEf
ts-soft hat geschrieben:Wenn Du vielleicht erstmal Deine bisherige Lösung posten könntest, das spart
ne menge Raterei und Postings die nicht zutreffen
Hallo, meine Lösung steht oben im Text!
Zur Erinnerung:
Cursor hinter das letzte Zeichen der letzten Reihe, 'Entf' drücken, sodaß der Cursor dort steht und abspeichern.
Danach können die gesamten Reihen ausgewertet oder geändert oder was auch immer für Lotto damit gemacht wird, problemlos verarbeitet werden.
Der Fehler tritt nicht nur bei Dateien auf, die ich selbst abgespeichert habe, sondern auch mit Dateien, die aus anderen Quellen stammen.
Der Fehler kann doch eigentlich nur daran liegen, dass die letzte Reihe, in der der Cursor steht, leer ist.
Eine Fehlermeldung wird nicht ausgegeben!
Wenn eine Datei aus 500 Reihen mit jeweils 6 Zahlen besteht, dann läuft die Schleife bei mir von 1 bis 500 und nicht von 0 bis 500-1.
Könnte das da etwas mit zu tun haben?

Verfasst: 25.01.2006 22:35
von Konne
Also es wäre doch schonmal interessant was du für ein Gadget benutzt. Leerzeichen nach hinten setzten und "entf" zu emulieren sollte die absolute ausnahme darstellen.

Verfasst: 25.01.2006 22:54
von ts-soft
>> Hallo, meine Lösung steht oben im Text!
Da steht überhaupt nichts, weder wie Du die Datei öffnest, noch wie Du die
Zeile oder die Datei ausliest.

Da steht nur, was Du mit Notepad oder was auch immer machst :freak:

Verfasst: 25.01.2006 23:07
von WeEf
Hallo Konne und TS-Soft,

ich benutze für das, was ich wissen möchte, erstmal überhaupt kein Gadget.
Beim Lotto gibt es VEW-Systeme, z. B. VEW609 (in NRW, teilweise andere Bezeichnungen).
Ich verwende den OpenFileRequester und den SaveFileRequester!
Ich erstelle solche Systeme und diese sind wie folgt abgespeichert:

01 02 03 04 05 06
01 02 03 04 07 08
01 02 03 06 07 09
01 02 04 05 08 09
01 02 05 06 07 08
01 03 04 06 08 09
01 03 05 07 08 09
01 04 05 06 07 09
02 03 04 05 07 09
02 03 05 06 08 09
02 04 06 07 08 09
03 04 05 06 07 08

Diese Zahlenreihen sollen eingelesen werden (mein Problem, ohne die von mir beschriebene Methode klappt das nicht) und dann verarbeitet werden, für das obige Beispiel mit allen 84 Kombinationen des Vollsystems zu vergleichen. Es werden aber noch unzählige andere Möglichkeiten ausgewertet, was auch einwandfrei funktioniert, aber nur dann, wenn der Cursor hinter dem letzten Zeichen der letzten Reihe, oben 08 steht. Üblicherweise steht der in der Reihe nach 03 04 05 06 07 08.
Die führende '0' dient nur der Übersichtlichkeit, falls zweistellige Zahlen enthalten sind, sie ist nicht wirklich erforderlich.
Für die spätere Anzeige verwende ich das ListIconGadget, da hätte ich die Zahlen gerne rechtsbündig stehen (das schaffe ich auch nicht), ansonsten habe ich aber alles so, wie ich es haben möchte.

Verfasst: 25.01.2006 23:34
von ts-soft
Ich weiss zwar immer noch nicht, wie Du die Datei einliest, bzw. speicherst, lediglich, wie Du die Datei auswählst.
Aber wenn Du WriteStringN() verwenden solltest, so solltest Du in der letzen Zeile, die Version ohne N also WriteString() verwenden.
Zu weiteren Ratespielen bin ich aber gerade nicht aufgelegt.

Verfasst: 26.01.2006 10:49
von Sylvia
Probier mal das hier:

Code: Alles auswählen

OpenFile(1,"C:\lotto.txt")

While Eof(1)=0
     Debug ReadString()
Wend

CloseFile(1)
Falls es funktioniert mit diesem Code (und verlasse dich darauf, das wird es) liegt
dein Problem wo ganz wo anderst

Verfasst: 26.01.2006 15:04
von Konne
Also ich weiß ja net aber wenn du kein Gadget hast wo kannst du dann nen Cursor haben?????????Poste mal echt den Code. Viele Anfänger haben angst dass er dann geklaut wird aber du kannst sicher sein das warscheinlich nicht den Umfang und die Komlexität hat dass sich jemand die Mühe machen würde es zu kopieren.

Verfasst: 26.01.2006 16:28
von WeEf
Hallo zusammen,

ich lese die Daten wie folgt ein:

Code: Alles auswählen

;Prozedur Zahlen einlesen
Procedure.l GetAscNum()
EODF.l=0
Outp.l=0
Inp.l=0
Repeat
inp = ReadByte()
Until inp >= 48 And inp <= 57
outp = (inp-48)       
Repeat
inp = ReadByte()
If inp >= 48 And inp <= 57
outp * 10
outp + (inp-48)
Else
EODF = 1
EndIf
Until EODF = 1
ProcedureReturn(outp)
EndProcedure
;Ende Prozedur Zahlen einlesen
Das ist aber ja nicht das Problem. Das Problem liegt in der mit dem Editor abgespeicherten Datei, meinetwegen mit Namen 'LOTTO.TXT'
Angenommen, ich lade die Ziehungsdaten der Lottogesellschaft herunter und speichere diese auf der Platte ab, kann ich diese erst dann einlesen, wenn ich die Datei mit Doppelklick öffne, (der blinkende Strich, wo das nächste Zeichen eingefügt werden kann, den ich vielleicht nicht ganz richtig als Cursor bezeichnet habe) steht dann in einer leeren Zeile nach dem letzten Zeichen der Datei.
Starte ich eins meiner Tools, passiert überhaupt nichts!
Klicke ich aber direkt hinter das letzte Zeichen der letzten Reihe und drücke die 'Entf'-Taste, womit ich wahrscheinlich diese Zeile, in der vorher der blinkende Strich stand, lösche, läuft alles einwandfrei.
Vielleicht liegt das auch nicht an PureBasic, mit VisualBasic hat das vorher so aber funktioniert.
Konne, ich möchte keins der Tools hier veröffentlichen.
Wenn du mir aber helfen oder den Fehler selbst nachvollziehen willst, schicke ich Dir aber gerne eins per Mail zu.