Einlesen aus Dateien

Anfängerfragen zum Programmieren mit PureBasic.
WeEf
Beiträge: 36
Registriert: 14.12.2004 23:12
Wohnort: Remscheid
Kontaktdaten:

Einlesen aus Dateien

Beitrag 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?
PureBasic 4.31
Windows 7

Gruß WeEf
Es ist noch kein Meister vom Himmel gefallen - vielleicht sind auch gar keine oben
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Wenn Du vielleicht erstmal Deine bisherige Lösung posten könntest, das spart
ne menge Raterei und Postings die nicht zutreffen
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
WeEf
Beiträge: 36
Registriert: 14.12.2004 23:12
Wohnort: Remscheid
Kontaktdaten:

Beitrag 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?
PureBasic 4.31
Windows 7

Gruß WeEf
Es ist noch kein Meister vom Himmel gefallen - vielleicht sind auch gar keine oben
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag 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.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
WeEf
Beiträge: 36
Registriert: 14.12.2004 23:12
Wohnort: Remscheid
Kontaktdaten:

Beitrag 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.
PureBasic 4.31
Windows 7

Gruß WeEf
Es ist noch kein Meister vom Himmel gefallen - vielleicht sind auch gar keine oben
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Sylvia
verheiratet<br>1. PureGolf-Gewinner
Beiträge: 487
Registriert: 29.08.2004 09:42
Wohnort: Old Europe

Beitrag 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
Basic Pur = PureBasic
Benutzeravatar
Konne
Beiträge: 764
Registriert: 30.03.2005 02:20
Kontaktdaten:

Beitrag 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.
WeEf
Beiträge: 36
Registriert: 14.12.2004 23:12
Wohnort: Remscheid
Kontaktdaten:

Beitrag 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.
PureBasic 4.31
Windows 7

Gruß WeEf
Es ist noch kein Meister vom Himmel gefallen - vielleicht sind auch gar keine oben
Antworten