Datenbank Tutorial

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

vanjolo

Betreff: Datenbank Tutorial

BeitragMi, Feb 04, 2009 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo
gibt es irgendwo ein Datenbank Tutorial? Oder hat jemand ein einfaches Beispiel auf das man aufbauen könnte?

Ich müste aus einer Text Datei Daten einlesen und wieder raussuchen können, bzw nach Datensätzen filtern können. Die Daten selbst würde ich Zeilenweise mit semikolon getrennt schreiben.

Ich habe nichtmal ansatzweise eine Idee wie ich beginnen könnte.
***************************
in Entwicklung:
Tank Battles - Panzeraction
Pacific Battles - Rundenstrategie
abgeschlossenes Projekt: Harrier Assault

Xeres

Moderator

BeitragMi, Feb 04, 2009 14:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Was du brauchst findet man unter "String Parsing". Für diesen Speziellen Fall kann ich dir SpionAtoms nwort$ Funktion nur empfehlen:
Code: [AUSKLAPPEN]
; SpionAtom:
; satz$ ist der zu untersuchende String wort gibt an, das wievielte Wort gesucht werden soll
Function nwort$(satz$, wort)
If wort < 1 Then Return ""
trenn$ = ";" ;<-- Trennzeichen
satz$ = satz$ + trenn$
w = 0
pos = 1
   While w < wort And pos > 0
      While Mid$(satz$, pos, 1) = trenn$
      pos = pos + 1
      Wend
      x = pos
      y = Instr(satz$, trenn$, pos)
      pos = y
      w = w + 1
   Wend
Return Mid$(satz$, x, y - x)
End Function
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

vanjolo

BeitragMi, Feb 04, 2009 20:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich versteh nur Bahnhof Confused


Ich möchte eine Textdatei mit Daten z.b.:

f16;14,52;9,45;5,09;2142;76,31;Die F-16 Fighting Falcon ist ein Mehrzweckkampfjet der amerikanischen Firma General Dynamics
f18;17,07;11,43;4,66;1880;106,6;Die F/A-18 Hornet ist ein zweistrahliges Mehrzweckkampfflugzeug des US-Flugzeugbauers McDonnell Douglas
einlesen

diese Daten sollen so aufgeschlüsselt angezeigt werden:

Typ: F16
Länge: 14,52 m
Spanweite: 9,45 m
Höhe: 5,09 m
Geschwindigkeit: 2142 km/h
Schubkraft: 76,31 kN


Wenn ich z.b. nach Geschwindigkeit: 2000 suche, sollen mir alle Flugzeuge ausgeworfen werden die mind. 2000 km/h fliegen.


Ich weis nichtmal womit ich anfangen soll


Sad
***************************
in Entwicklung:
Tank Battles - Panzeraction
Pacific Battles - Rundenstrategie
abgeschlossenes Projekt: Harrier Assault
  • Zuletzt bearbeitet von vanjolo am Mi, Feb 04, 2009 20:44, insgesamt einmal bearbeitet
 

da_poller

BeitragMi, Feb 04, 2009 20:39
Antworten mit Zitat
Benutzer-Profile anzeigen
du willst eine art datenbank selber erstellen?

in jeder zeile sind mehrere daten..

sofern ich das richtig verstanden hab mit ReadLine die zeile auslesen und mittels Left, Mid, Rigth und Instr den string zerlegen und die daten auslesen bzw in einen type oder array speichern.
 

vanjolo

BeitragMi, Feb 04, 2009 20:53
Antworten mit Zitat
Benutzer-Profile anzeigen
Also gedanklich stell ich mir volgende Struktur vor.

- Datei einlesen

- Suchmaske

Typ:
Länge:
Spanweite:
Höhe:
Geschwindigkeit:
Schubkraft:
Beschreibung:
evtl. Foto

- Dort kann ich ein oder mehrere Bedingungen setzen.
- Anzeige der passenden Datensätze

Drucken, Neue Suche, Verlassen

Das ganze im Style vom alten DOS Wink
***************************
in Entwicklung:
Tank Battles - Panzeraction
Pacific Battles - Rundenstrategie
abgeschlossenes Projekt: Harrier Assault

The_Nici

BeitragMi, Feb 04, 2009 21:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würde das in einem strukturierten Textfile machen.
z.B. sowas:
Code: [AUSKLAPPEN]

[AIRPLANE]
NAME = Lolinator 123
LENGTH = 13.37
etc.
[/AIRPLANE]

Dann das ganze mit ReadLine auslesen und parsen. Du musst herausfinden ob es ein Flugzeug ist (If txtline$ = "[AIRPLANE]"), wie die Daten sind (Instr das "=" herausfinden und mit Mid kucken ob ein Leerzeichen daneben ist) und welche Daten es sind (Vom Anfang bis zum "=" checken, dann Name herausfiltern)
Es ist nicht viel mehr dahinter als etwas Textparsing.
MfG
 

vanjolo

BeitragMi, Feb 04, 2009 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Du meinst alle Flugzeugdaten die ich sammel in dieser Form in ein Text file schreiben.
Code: [AUSKLAPPEN]
[F16]
Länge         = 14,52 m
Spanweite       = 9,45    m
Höhe          = 5,09    m
Geschwindigkeit = 2142    km/h
Schubkraft       = 76,31 kN
[/F16]


Jetzt die Datei einlesen mit:
file = OpenFile("daten.txt")

und dann die suchfunktion?
***************************
in Entwicklung:
Tank Battles - Panzeraction
Pacific Battles - Rundenstrategie
abgeschlossenes Projekt: Harrier Assault

Xeres

Moderator

BeitragMi, Feb 04, 2009 21:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Je nach dem, wie du das Textfile gestallten möchtest... Einzeilig:
Daten.txt
Code: [AUSKLAPPEN]
f16;14,52;9,45;5,09;2142;76,31;Die F-16 Fighting Falcon ist ein Mehrzweckkampfjet der amerikanischen Firma General Dynamics
f18;17,07;11,43;4,66;1880;106,6;Die F/A-18 Hornet ist ein zweistrahliges Mehrzweckkampfflugzeug des US-Flugzeugbauers McDonnell Douglas


Datenbank.bb
Code: [AUSKLAPPEN]
Graphics(800, 600, 0, 2)

; Jeder Datenbank-Eintrag wird mit diesen Daten gefüttert:
Type TFlugzeug
   Field Typ$
   Field Lang#
   Field Spanweite#
   Field Hoch#
   Field Geschwindigkeit#
   Field Schubkraft#
   Field Beschreibung$
End Type

Datenbank_Lesen()
Datenbank_Zeigen()
Suche_Spannweite(0, 10) ;Spannweite größer 10 m
WaitKey()
End


Function Datenbank_Lesen(file$="Daten.txt")
   ;* Die Datei muss vorhanden sein, hier wird nicht darauf getestet!
   Local source = OpenFile(file$)
   ;* Einlesen der Datei Zeile für Zeile:
   Repeat
      Local zeile$ = ReadLine(source)      ;Zeile aus der Datei Lesen
      zeile$ = Replace(zeile$, ",", ".")   ;Deutsch->Englisch Komata (Achtung, Komata im Text werden auch Punkte!)
      Local F.TFlugzeug = New TFlugzeug   ;Ein neuer Datenbank-Eintrag
      ;* Jetzt wird die Zeile an den ";" gesplittet
      F\Typ$ = nwort$(zeile$, 1)
      F\Lang# = Float(nwort$(zeile$, 2)) ; nwort liefert einen String, besser man konvertiert in das ziel Format (Float)
      F\Spanweite# = Float(nwort$(zeile$, 3))
      F\Hoch# = Float(nwort$(zeile$, 4))
      F\Geschwindigkeit# = Float(nwort$(zeile$, 5))
      F\Schubkraft# = Float(nwort$(zeile$, 6))
      F\Beschreibung$= nwort$(zeile$, 7)
   Until Eof(source) ;Bis zum ende der Datei.
   ;Diese Technik funktioniert nur dann, wenn die Art der Einträge immer vorhanden sind und immer in der gleichen Reihenfolge
   ;auftauchen. Für kompliziertere Daten muss man einen größeres Parser bemühen.
   CloseFile source
End Function


Function Datenbank_Zeigen()
   ;Sollte selbsterklärend sein...
   Local F.TFlugzeug, i=0
   For F = Each TFlugzeug
      i=i+1
      Print "Typ: "+F\Typ$
      Print "Länge: "+F\Lang#
      Print "Spanweite: "+F\Spanweite#
      Print "Hoch: "+F\Hoch#
      Print "Geschwindigkeit: "+F\Geschwindigkeit#
      Print "Schubkraft: "+F\Schubkraft#
      Print "Beschreibung: "+F\Beschreibung$
      Print
   Next
   Print "-----"
   Print i+" Einträge gefunden"
End Function

; gk = 0 -> Größer als
; gk = 1 -> Kleiner als
Function Suche_Spannweite(gk=0, wert#)
   Local F.TFlugzeug, i=0
   For F = Each TFlugzeug
      If gk = 0 Then
         If F\Spanweite# > wert# Then
            Print F\Typ$ + " mit " + F\Spanweite#
         EndIf
      Else
         If F\Spanweite# < wert# Then
            Print F\Typ$ + " mit " + F\Spanweite#
         EndIf
      EndIf
   Next
End Function

; SpionAtom:
; satz$ ist der zu untersuchende String wort gibt an, das wievielte Wort gesucht werden soll
; Im String "Test;Lallilu;805" ist "Test" wort=1, "Lallilu" ist wort=2 und "805" ist wort = 3
; Achtung!: Zahlen ins passende Format kovertieren mit int() oder Float()!
Function nwort$(satz$, wort)
   If wort < 1 Then Return ""
   trenn$ = ";" ;<-- Trennzeichen
   satz$ = satz$ + trenn$
   w = 0
   pos = 1
   While w < wort And pos > 0
      While Mid$(satz$, pos, 1) = trenn$
         pos = pos + 1
      Wend
      x = pos
      y = Instr(satz$, trenn$, pos)
      pos = y
      w = w + 1
   Wend
   Return Mid$(satz$, x, y - x)
End Function


Edit:
Einfache Suchfunktion ergänzt, ich Kommetier nochmal durch...
Edit 2:
Ein paar mehr Kommentare eingefügt.
closefile hinzugefügt
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
  • Zuletzt bearbeitet von Xeres am Mi, Feb 04, 2009 22:08, insgesamt 3-mal bearbeitet
 

vanjolo

BeitragMi, Feb 04, 2009 21:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Shocked das hast du jetzt grad geschrieben Very Happy
Peinlich ich versteh nichtmal Ansatzweise wie man sowas so schnell hinzaubert.
Sad

Ich versuche mal den Code zu verstehen und dann eine Suchfunktion zu schreiben. Ich hoffe ich darf nochmal fragen wenn ich nicht weiterkommen.

Danke!!
***************************
in Entwicklung:
Tank Battles - Panzeraction
Pacific Battles - Rundenstrategie
abgeschlossenes Projekt: Harrier Assault

ozzi789

BeitragMi, Feb 04, 2009 21:45
Antworten mit Zitat
Benutzer-Profile anzeigen
also wenn du alles in nem Type hast, ist das nicht sehr schwer eine Suchfunktion zu machen Wink
wenn du willst kann ich dir die Suchroutine meines TPB schicken ^^


mfg
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5
 

vanjolo

BeitragDo, Feb 05, 2009 7:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Das wäre super Smile Ich kriegs nicht hin...
***************************
in Entwicklung:
Tank Battles - Panzeraction
Pacific Battles - Rundenstrategie
abgeschlossenes Projekt: Harrier Assault

ozzi789

BeitragDo, Feb 05, 2009 8:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
If Not CountGadgetItems (listbox2)=0
FreeGadget listbox2
listbox2 = CreateListBox (200,290, 200,190, win)
malu=0
EndIf
EndIf
first_time=0
   For i= 1 To anzz
      pos = 0
   

      input_lower$=Lower$(input_search$)
      input_lower$=Trim$(input_lower$)

      tracks_lower$=Lower$(tracks_short$(i))
      tracks_lower$=Trim$(tracks_lower$)


      pos = Instr (tracks_lower$,input_lower$)
      

      
      If pos <>0   
      
     AddGadgetItem listbox2, "("+i+") "+tracks_short$(i)
     ;Print CountGadgetItems (listbox2)
      EndIf
   Next
EndIf


If search=1 And SelectedGadgetItem (listbox2)<>-1
search=0
slu=1
sel_1=SelectedGadgetItem (listbox2)
glob$=Mid(GadgetItemText$ (listbox2, sel_1),2,-1)
pos2 = Instr (glob$,")")
akt = Mid (glob$,1,pos2-1)

SelectGadgetItem(listbox,akt)
EndIf




Kurze Erklärung(bin inner Schule), hier sind die Lieder als Dim gespeichert.
Die Pfade zu den Lieder sind in einer Datei und auch als Dim ausgelesen.

Nun duchsuchen wir alle einträge mittels instr und wenn etwas gefunden wird, wird es in einer 2ten Listbox eingetragen.

Jeder eintrag hat auch noch ein 2tes Feld, welches die Lieder "ID" enthält, diese sagt aus, welcher Eintrag es in der Libary hat.

Hoffe es hilft Smile
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5
 

vanjolo

BeitragDo, Feb 05, 2009 9:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke Dir. Ich kann es erst heute abend ausprobieren, bin auf der Arbeit Very Happy
***************************
in Entwicklung:
Tank Battles - Panzeraction
Pacific Battles - Rundenstrategie
abgeschlossenes Projekt: Harrier Assault

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group