Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Zahlen einlesen aus Datei - Wann ist Schluss?
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Eternal_pain



Anmeldungsdatum: 08.08.2006
Beiträge: 1783
Wohnort: BW/KA

BeitragVerfasst am: 18.03.2014, 20:18    Titel: Antworten mit Zitat

Eternal_pain hat Folgendes geschrieben:
Wieso baust du dir deine Datei nicht nach einem festen Schema auf?


nemored hat Folgendes geschrieben:
Statt Datum- und Zeit-Strings würde ich außerdem eher Serial Numbers verwenden - sparen eine Mange Platz, und wenn dann jeder Datensatz exakt 4+8 Byte groß ist (wobei 1+8 Byte auch ausreichen würden), kannst du bequem an jede beliebige Stelle springen zum auslesen.


Das wäre eine bessere Lösung, ein Datensatz ist immer gleich groß und somit kannst anhand der Dateigröße die exakte Anzahl Daten von jeder Position aus der Datei raus laden....
_________________
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen MSN Messenger
MOD
Fleißiger Referenzredakteur


Anmeldungsdatum: 10.09.2007
Beiträge: 1003

BeitragVerfasst am: 18.03.2014, 21:31    Titel: Antworten mit Zitat

Off-Topic:
Zitat:
Die Funktion "Eof" arbeitet bei Dateien >4 GB nicht korrekt.

Das Problem wird in der nächsten Version gefixt sein: commit
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 21.03.2014, 18:39    Titel: Antworten mit Zitat

Zitat:
Die Datei ist dann allerdings nicht mehr für Menschen lesbar, aber das scheint mir ja auch nicht das Ziel zu sein.

Die Datei sollte für Menschen schon noch lesbar sein! Ist eine txt Datei, wo alle gewonnenen Roulettezahlen mit Datum und Uhrzeit zum nachschauen drin stehen!

Die eine Idee die ich noch hatte, funktioniert sowie so nicht! Sobald ich die Datei lösche, kann ich keine Roulettezahlen mehr anschauen. Habe sie ja dann praktisch gelöscht! Ich bin da noch ein wenig am Rätseln, wie ich das am besten mache.

Es ist schon erstaunlich, dass unten stehende Zahlen nicht auslesbar sind!

Code:
23           04-20-2013    00:23:19
 5            04-20-2013    00:27:09
 4            04-20-2013    00:27:49


Die Zahlen werden (fast) korrekt ausgelesen. Auch da gibt es ein kleines Problem! Aber das Datum wird zusammen mit der Uhrzeit ausgelesen!
Sollte normalerweise nicht sein, oder?

Ideen habe ich schon noch, wie das ganze zum lösen ist! Mal schauen was sich machen lässt.
Vielleicht lasse ich es ja auch sein? Das ist nur eine Idee von mir mit dem anzeigen der letzten 5-10 Roulettezahlen. Dummerweise habe ich auf dem Bildschirm keinen Platz mehr, für das Anzeigen der letzten 5-10 gewonnenen Roulettezahlen!

Wer Lust hat, kann sich Gedanken machen über einen funktionierenden Multiplayermodus für Roulette! Wie ist so einer am besten zu realisieren... Welche Funktionen sind vorhanden ... und so weiter!

Vielleicht kann man so einen für mein Rouletteprogramm realisieren?
Ich bin eh grad dabei mein Rouletteprogramm zu verbessern, dann könnte man sowas gleich mit einbauen!

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4704
Wohnort: ~/

BeitragVerfasst am: 21.03.2014, 20:08    Titel: Antworten mit Zitat

Zitat:
Aber das Datum wird zusammen mit der Uhrzeit ausgelesen!
Sollte normalerweise nicht sein, oder?

Klingt ziemlich normal. Woher soll deine Auslese-Funktion denn auch wissen, wo der String zu Ende ist und dass die Leerzeichen nicht zum String dazugehören?

Zitat:
Sobald ich die Datei lösche, kann ich keine Roulettezahlen mehr anschauen. Habe sie ja dann praktisch gelöscht!

Ich dachte, eine Datei willst du immer stehen lassen und nur die andere immer verkürzen (für die dann kein menschenlesbares Format nötig ist - das menschenlesbare kann ich ja in der Gesamtlogdatei nachsehen).
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RockTheSchock



Anmeldungsdatum: 04.04.2007
Beiträge: 138

BeitragVerfasst am: 21.03.2014, 23:04    Titel: Antworten mit Zitat

Was ist an meiner Lösung falsch? Egal wie groß die Datei ist, es sollte immer schnell sein und funktionieren?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1280
Wohnort: Ruhrpott

BeitragVerfasst am: 22.03.2014, 03:09    Titel: Antworten mit Zitat

Hallo ALWIM

Du hast eine der wichtigsten Fragen noch nicht beantwortet:
RockTheSchock hat Folgendes geschrieben:
- Hast du Einfluss auf das Format der Textdatei. Wird die Datei von einem Programm dass du selbst geschrieben hast erzeugt?

Ich hätte da vielleicht etwas für dich, ein wenig durch die Hintertür, aber ca. um den Faktor 10 schneller als "normale" Dateioperationen. Aber dafür müsste ich den genauen Aufbau der Datei kennen, insbesondere die verwendeten Trennzeichen. Wenn du einmal die Ascii-Werte der ersten ca. 100 Bytes der Datei posten würdest, könne ich dir eine Auslesefunktion maßschneidern.

Wenn du immer nur die neu dazugekommenen Zahlen auslesen möchtest, gibt es einen viel einfacheren Weg: Vorausgestzt, du hast überhaupt erst einmal ein Programm, das die Zahlen korrekt ausliest, kannst du, nachdem du die Datei einmal komplett bis zum Ende ausgelesen hast, mit
Code:
Dim As LongInt zeiger
zeiger = Seek(f)
den Dateipointer ermitteln und in einer .ini - Datei abspeichern. Um beim nächsten Programmdurchlauf nur die neu dazugekommenen Zahlen auszulesen, holst du dir den gespeicherten Wert zurück und setzt den Dateipointer mit
Code:
Seek f,zeiger
auf die Position, an der du beim letzten Mal aufgehört hast. Die nächste Leseoperation gibt dir dann die erste neue Zahl zurück.

Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!


Zuletzt bearbeitet von grindstone am 23.03.2014, 11:48, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 22.03.2014, 17:29    Titel: Antworten mit Zitat

Zitat:
- Hast du Einfluss auf das Format der Textdatei. Wird die Datei von einem Programm dass du selbst geschrieben hast erzeugt?

Ja, die Datei wird von einem Programm erzeugt, dass ich selber geschrieben habe.
So wird das ganze gespeichert:
Code:
' Roulettezahl speichern
   OPEN "Roulettezahlen.txt" FOR APPEND AS #f
   PRINT #f, Roulettekugel, Datum, TIME
   CLOSE #f


So sieht die txt Datei dann aus:
Code:
23           04-20-2013    00:23:19
 5            04-20-2013    00:27:09
 4            04-20-2013    00:27:49


Mittlerweile habe ich was funktionierendes in meinem Programm drin!

Bei 2.605.056 Zahlen sind das 47 Sekunden Einlesezeit!
Bei 2.572.596 Zahlen mit Datum und Uhrzeit sind das 56 Sekunden Einlesezeit.

Ich glaube nicht, dass einer so oft Roulette spielt!

Pro Minute ca. 1 gewonnene Zahl macht ca. 60 Zahlen in der Stunde! Wer spielt schon jeden Tag 1 Stunde lang Roulette? Wären im Jahr ca. 21900 Zahlen! 60 Jahre lang und wir kämen auf gerade mal 1.314.000 Zahlen!
Das ist alles noch im grünen Bereich würde ich mal sagen.

Bei Tests brauchte ich ca. 45 Sekunden bis ich auf eine neue Zahl setzen konnte! Da habe ich aber nicht so lange überlegt!

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1280
Wohnort: Ruhrpott

BeitragVerfasst am: 23.03.2014, 11:47    Titel: Antworten mit Zitat

Hallo ALWIM!

Wenn du die Zahlen so abspeicherst, ist der gezielte Zugriff doch ganz einfach!

Jeder Record belegt einschließlich CR/LF genau 38 Bytes (das kannst du mit jedem Hex-Editor nachprüfen). Die Anzahl der in deiner Datei gespeicherten Datensätze ermitelst du mit
Code:
Dim As Integer anzahl
anzahl = Lof(f) / 38
und um auf einen bestimmten Datensatz zuzugreifen, setzt du vor der Leseoperation den Dateipointer mit
Code:
Dim As Integer datensatz
datensatz = 312 'nur mal als Beispiel
Seek f,(datensatz - 1) * 38 + 1

auf das erste Zeichen des 312. Datensatzes, den du dann anschließend ganz normal auslesen und anzeigen kannst:
Code:
Dim As String wert
Input #f, wert
Print "   Datensatz";datensatz
Print "Roulettezahl ";Left(wert,3)
Print "       Datum ";Mid(wert,14,10)
Print "     Uhrzeit ";Mid(wert,28,8)


Gruß
grindstone
_________________
For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Sebastian
Administrator


Anmeldungsdatum: 10.09.2004
Beiträge: 5969
Wohnort: Deutschland

BeitragVerfasst am: 23.03.2014, 12:23    Titel: Ringpuffer zum Einlesen Antworten mit Zitat

Hi ALWIM,

wenn du nicht alle x Millionen Zahlen brauchst in der Auswertung, sondern nur die nach Datum neusten 5, könntest du beim Einlesen einen Ringpuffer verwenden. Dann brauchst du kein riesengroßes Array und musst dich nicht darauf verlassen, dass bspw. immer ausschließlich Windows-Zeilenumbrüche CrLf vorkommen.

Viele Grüße!
Sebastian
_________________

Die gefährlichsten Familienclans | Opas Leistung muss sich wieder lohnen - für 6 bis 10 Generationen!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
ALWIM



Anmeldungsdatum: 08.08.2006
Beiträge: 1048
Wohnort: Niederbayern

BeitragVerfasst am: 24.03.2014, 00:17    Titel: Re: Ringpuffer zum Einlesen Antworten mit Zitat

Sebastian hat Folgendes geschrieben:
Hi ALWIM,

wenn du nicht alle x Millionen Zahlen brauchst in der Auswertung, sondern nur die nach Datum neusten 5, könntest du beim Einlesen einen Ringpuffer verwenden. Dann brauchst du kein riesengroßes Array und musst dich nicht darauf verlassen, dass bspw. immer ausschließlich Windows-Zeilenumbrüche CrLf vorkommen.

Viele Grüße!
Sebastian

Genau so eine ähnliche (gleiche) Idee hatte ich mal im Kopf drin! Also wenn 1 Spiel gemacht wurde, die älteste Zahl aus der Datei löschen und die neueste gewonnene Zahl in die Datei abspeichern! Vielleicht kann ich das irgendwie, irgendwann umändern! Habe noch keine Idee gehabt, wie ich das am besten hinkriege. Bis jetzt habe ich die wahrscheinlich schlechteste bzw. ungünstigste aller Methoden drin. Alle Zahlen werden ausgelesen und die 10 neuesten auf dem Bildschirm angezeigt! Gleichzeitig wird die Anzahl der vorhandenen Zahlen ermittelt! Diese wird benötigt zur Errechnung der letzten gewonnenen Zahlen.

Aber danke für die professionelle Hilfe! Mein Projekt/Idee funktioniert bisher problemlos!

Sobald ich 2 wichtige Sachen noch hineinprogrammiert habe, werde ich das ganze mal als Download zur Verfügung stellen! Ist richtig Geil geworden! Bei Tests bin ich von 300.000 € auf 600.000 € raufgekommen! Allerdings auch von 800.000 € runter auf 300.000 €!

Ich habe ein gewinnbringendes System für Roulette! Hoher Gewinn garantiert! Würde ich ins Casino gehen, würde ich bei jedem Casino Hausverbot kriegen bzw. das Casino zum Bankrott bringen! So sicher ist mein System. Fast 100% Wasserdicht! Eine kleine Schwachstelle gibt es leider auch bei meinem System. Demnach könnte es sein, dass man trotz dem Wasserdichten System große Verluste macht!

Gruß
ALWIM
_________________
SHELL SHUTDOWN -s -t 05
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz