Suche Lösung für Datenbank
Übersicht

SmittyBetreff: Suche Lösung für Datenbank |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo
Ich habe eigentlich erst wenige Tage Blitz Basic Erfahrung und komme gerade bei meinem Game nicht weiter. Das Forum habe ich durchsucht, aber nicht wirklich etwas gefunden was mir weiter hilft. Hier mein Problem: 1. Frage: Ich habe eine Textdatei, die wie eine Datenbank aufgebaut ist. Bsp.: 1|Mustermann|rot|100|200; 2|Musterfrau|blau|300|400; 3|Müller|gelb|200|200; ... ... Die Trennzeichen sind mir egal. Die Datei hat etwa 15-20 Spalten. Wie schaffe ich es nun einen einzelnen Datensatz über den Index zu suchen und auszulesen? Bei den Lösungen die ich bisher gefunden habe, wurde immer die gesammte Datei ausgelesen. Da meine Datei aber einige tausend Datensätze hat, würde das, schätze ich mal, sehr den Arbeitsspeicher belasten (oder doch nicht?). Gibt es eine Möglichkeit eine Zeile zu suchen und auszulesen? Hier noch zwei nebensächliche Fragen. 2. Frage: Kann man diese Zeile dann verändern und speichern? 3. Frage: Kann man neue Datensätze ans Ende der Datei hängen? Das wichtige dabei ist, das die Daten trotzdem weiterhin mit dem normalen Windows-Editor Bearbeitbar und Lesbar bleiben müssen und das es die Spielgeschwindigkeit nicht sehr beeinträchtigt, da es wie gesagt, viele tausend Datensätze sind. Für Codebeispiele wäre dankbar. |
||
![]() |
Hubsi |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ist nicht ganz einfach, aber durchaus möglich. Was dazu brauchen wirst sind FileSeek(), SeekFile(), Types, Mid$() sowie die normalen Dateibefehle. Ist wie gesagt nicht das einfachste, aber machbar ![]() |
||
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn... |
IonPainter |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich würde die Datei zu Anfang in eine Type Liste einlesen und dann da komfortabel durchsuchen und bei Programmende wieder speichern. Oder brauchst du zur Laufzeit Notepad Zugriff? | ||
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
https://www.blitzforum.de/view...p;start=20
Hier gibt die meisten Antworten auf deine Fragen hoffe ich mal! Zitat: Gibt es eine Möglichkeit eine Zeile zu suchen und auszulesen?
Sind die Datensätze immer gleich lang dann geht mit seekfile Index*Datenlänge ganz gut ! wenn nicht dann bleibt dir nicht vielanderes über als alle Zeile durchzurattetern bis du an die richtige zeile kommst! Zitat: Kann man diese Zeile dann verändern und speichern?
ja geht auf jeden Fall sehr einfach wenn es die gleiche länge hat! Ansonsten alle nachfolgenden auslesen und wieder anhängen! Zitat: Kann man neue Datensätze ans Ende der Datei hängen?
das ist das einfachste BlitzBasic: [AUSKLAPPEN] Dat = OpenFile (Datei$) das wars schon! |
||
[BB2D | BB3D | BB+]
|
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich würde an deiner Stelle, wie IonPainter schon geschrieben hat, die ganze Datei in Types einlesen und im Programm bearbeiten. Meine Erfahrung hat gezeigt dass das einfacher und schneller geht als wenn du ständig an der Datei rumfummelst (War auch meine Idee am Anfang, hat sich aber nicht bewährt). | ||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
Smitty |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Zitat: Ich würde die Datei zu Anfang in eine Type Liste einlesen und dann da komfortabel durchsuchen und bei Programmende wieder speichern.
Ja, wie das geht, hab ich schon gefunden und könnte ich auch umsetzen. Ich weis nur nicht ob das auch so gut ist. Das muss doch extrem auf den Arbeitsspeicher gehen. Wenn du viele tausend Datensätze in den Types hat. Irgendwo in einem Tutorial zu Types steht auch, das diese für eine hohe Anzahl von Datensätze nicht geeignet sind und das Spiel enorm verlangsamen. Aber wenn das so läuft wäre das natürlich toll und einfach. Hat einer Erfahrung mit mit größeren Types? Zitat: Sind die Datensätze immer gleich lang dann geht mit seekfile Index*Datenlänge ganz gut ! In jeder Spalte stehen die selben Datentypen, Texte sind aber unterschiedlich lang, wie es nun gespeichert wird weis ich nicht. Bin wie gesagt Anfänger. |
||
René Meyer |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn die Zahl der Datensätze bekannt ist, dürfte ein Dim-Feld besser geeignet sein. Einfacher zum Auslesen ist es, wenn jeder Wert in einer Zeile abgelegt wird, dann mußt Du nicht mühsam die Werte zwischen den Trennzeichen auswerten.
Arbeitsspeicher-Probleme sollte es nicht geben. Überleg mal - eine Zeile 80 mit Zeichen sind bei 10.000 Zeilen gerade 800.000 Byte, also weniger als ein Megabyte. Die meisten Vollpreisspiele brauchen 256 Megabyte und mehr. |
||
www.blitzbasic.de | Das Buch zu Blitz Basic: www.schreibfabrik.de/txt/bbb |
![]() |
D2006Administrator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du könntest für Texte von vornherein eine Zeichenanzahl vorgeben.
Zum Beispiel bei Vornamen 20 Zeichen. Ist der Vorname zu lang, wird er abgeschnitten (wird ja wohl selten der Fall sein). Ist er zu kurz, wird er mit Leerzeichen aufgefüllt. Dadurch weißt du ja dann genau die exakte Größe einer Zeile. MfG D2006 |
||
Smitty |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@René Meyer
Stand halt im Tutorial, das Types dafür nicht geeignet sind. Aber an der Größe kann man das glaube nicht so ausmachen. Ich denke nämlich das, 1 Speicherstelle mit 100 Byte schneller vom Rechner zu verwalten ist, als 10 Speicherstellen mit 10 Byte(und dann alle Werte mal 1000, für mein Beispiel). Daher kann man das wohl nicht so einfach an der Größe insgesamt ausmachen. Ich bedanke mich für eure Tipps, ich werde es einfach mal testen und mich dann wieder melden. |
||
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, Fakt ist, dass wenn du eine Liste mit sehr vielen Types bei jedem Programmdurchlauf durchgehst das natürlich sehr lange dauert. Aber bei einer Datenbank geht es ja nicht um den dauernden Zugriff sondern um Suchen von Einträgen oder verschieben oder hinzufügen. Das würde jedoch immer nur in einem einzelnen Durchlauf resultieren, wobei es also nicht mehr so wichtig wäre ob es jetzt z.B. 5000 Einträge sind, weil sie nicht jeden Durchgang aufgerufen werden müssen. | ||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
Ctuchik |
![]() Antworten mit Zitat ![]() |
---|---|---|
Also wenn du häufig auf die verschiedenen Zeilen zugreifen musst, aber nicht alles in einen Array oder Types einlesen willst, dann würd ich das so machen, dass du lediglich die Positionen der einzelnen Datensätze einliest und speicherst.
Also etwa so (nicht sicher ob das funktioniert, ist jetzt nur so aus dem Kopf): BlitzBasic: [AUSKLAPPEN]
und kannst dann auf einzelne Datensätze zugreifen: BlitzBasic: [AUSKLAPPEN]
Bin mir nur nicht sicher, ob das mit ReadLine so funktioniert, ggf. einfach mal testen! MfG Ctuchik |
||
Zu den Nebenwirkungen gehören trockener Mund, Übelkeit, Erbrechen, Harnstau, schmerzhafter rektaler Juckreiz, Halluzinationen, Demenz, Psychose, Koma, Tod und Mundgeruch!
Magie eignet sich nicht für alle! Fraget euren Arzt oder Apotheker! |
![]() |
RallimenSieger des 30-EUR-Wettbewerbs |
![]() Antworten mit Zitat ![]() |
---|---|---|
das lesen wird sicher funktionieren!
Überschreiben nur wenn es gleich lange Strings sind, da sonst alle nachfolgenden Datensätze nicht mehr lesbar sind! Anhängen geht immer! Noch eine Frage , um wieviele Daten handelt es sich überhaupt, bzw wie groß ist die Datei ... 50MB? |
||
[BB2D | BB3D | BB+]
|
Smitty |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ein Datensatz/Zeile kann schon auf die 300 Bytes kommen.
Die Anzahl kann viele tausend betragen, bzw. kann vom Spieler beliebig vergrößert werden. Ist halt ein Managerspiel und hat von der reinen Spielidee sehr großes Potenzial. Eine mögliche spätere Fancommunity könnte die Datensätze sicher auf weit über 10k bringen. Aber aufgrund der hier vorgeschlagenen Lösungswege, bin ich recht optimistisch was die Umsetzung angeht. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group