Kleine dynamische Datenbank im Interface-Stil
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Wegen dem SelectRowByEntry. Die Funktion sucht immer ab der aktuellen
Zeile plus eins. Da fällt mir aber gerade ein, dass dann die erste Zeile nie
gefunden werden kann.
Na das werde ich dann mal morgen verbessern vielleicht mit einem
optionalen Parameter. Aber das mit der LinkedList ist eine gute Idee. Dann
gebe ich eine Liste zurück mit allen Indices, wo der Suchbegriff gefunden
wurde.
Bis morgen dann.
Zeile plus eins. Da fällt mir aber gerade ein, dass dann die erste Zeile nie
gefunden werden kann.
Na das werde ich dann mal morgen verbessern vielleicht mit einem
optionalen Parameter. Aber das mit der LinkedList ist eine gute Idee. Dann
gebe ich eine Liste zurück mit allen Indices, wo der Suchbegriff gefunden
wurde.
Bis morgen dann.
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
Ich wollte gerade das mit der Suchergebnis-in-LinkedList-Geschichte zu Ende
bringen, da hab ich einen Bug gefunden.
Man kann in einem Interface als Parameter einer Funktion keine LinkedList
angeben.
Also das geht nicht:
Während das hier geht:
Also widme ich mich erstmal den Wildcards. 
bringen, da hab ich einen Bug gefunden.
Man kann in einem Interface als Parameter einer Funktion keine LinkedList
angeben.
Also das geht nicht:
Code: Alles auswählen
Interface Test
Methode(hallo.l())
EndInterface
Code: Alles auswählen
Procedure Test_Methode(hallo.l())
EndProcedure

- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
So, es ist vollbracht. Die Änderungen im Überblick:
- Changed: Alle SelectRowByEntry()-Funktionen beginnen die Suche
auf der aktuellen Zeile. Also vorher immer FirstRow() benutzen, wenn es
nicht anders gewünscht ist - Changed: SelectRowByEntryS() funktioniert jetzt auch mit Wildcards,
wenn der optionale Parameter mask auf #True gesetzt wird. - Added: SelectRowByEntryD() wählt auf Wunsch alle Doubles aus, die in
einem bestimmten Bereich liegen, den man mit dem Parameter range
angeben kann. Praktisch wegen den Ungenauigkeiten bei
Fließkommazahlen - Added: Alle DB_ListByEntry()-Funktionen funktionieren wie die
SelectRowByEntry()-Funktionen, erwarten aber eine LinkedList des Typs l,
in die alle Indices geschrieben werden, wo der Suchparameter zutrifft.
Leider kann ich die Funktionen nicht ins Interface mitaufnehmen, weil dort
keine LinkedLists angenommen werden. Bug?
- 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
Vielleicht beim nächstem Update zusätzlich als Zip anbieten, 1225 Zeilen
kopieren ist nicht so das Wahre
kopieren ist nicht so das Wahre

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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Super! Den ersten 'Extremtest' (scannen meiner C-Partition und eintragenNicTheQuick hat geschrieben:So, es ist vollbracht.
der gefundenen Dateien) hat Deine 'DB' schon mal klaglos überstanden

Morgen geht's an die Suchfunktionen

Vielen Dank für Deine Mühen!

Weichei!ts-soft hat geschrieben:1225 Zeilen kopieren ist nicht so das Wahre

Grüße ... Kiffi
a²+b²=mc²
- 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
Ne, kaputte MausKiffi hat geschrieben:Weichei!ts-soft hat geschrieben:t;]1225 Zeilen kopieren ist nicht so das Wahre
Grüße ... Kiffi

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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.

Funktioniert bisher alles sehr zufriedenstellend 
ich habe mir mal erlaubt, ein optionales Flag 'MatchCase' einzubauen,
damit DB_ListByEntryS() Treffer unabhängig von der Groß- und
Kleinschreibung des Suchbegriffes zurückliefert.
folgende kleine Änderungen sind dafür nötig:
Im Interface:
In DB_SelectRowByEntryS()
in DB_ListByEntryS()
Aufruf wie folgt:
Danke & Grüße ... Kiffi

ich habe mir mal erlaubt, ein optionales Flag 'MatchCase' einzubauen,
damit DB_ListByEntryS() Treffer unabhängig von der Groß- und
Kleinschreibung des Suchbegriffes zurückliefert.
folgende kleine Änderungen sind dafür nötig:
Im Interface:
Code: Alles auswählen
SelectRowByEntryS(Col.l, Entry.s, mask.l = #False, MatchCase.l = #False)
Code: Alles auswählen
Procedure.l DB_SelectRowByEntryS(*DB.DB_Struc, Col.l, Entry.s, mask.l = #False, MatchCase.l = #False) ;Wählt eine Zeile aus
[...]
Case 's'
If mask
If MatchCase
If CompareWithWildcards(*vEntry\s, Entry) : Break : EndIf
Else
If CompareWithWildcards(LCase(*vEntry\s), LCase(Entry)) : Break : EndIf
EndIf
Else
If MatchCase
If *vEntry\s = Entry : Break : EndIf
Else
If LCase(*vEntry\s) = LCase(Entry) : Break : EndIf
EndIf
EndIf
[...]
EndProcedure
Code: Alles auswählen
Procedure.l DB_ListByEntryS(*DB.DB_Struc, List.l(), Col.l, Entry.s, mask.l = #False, MatchCase.l = #False)
[...]
While *DBI\SelectRowByEntryS(Col, Entry, mask, MatchCase)
[...]
EndProcedure
Code: Alles auswählen
DB_ListByEntryS(*DB, Found(), 3, "*.ZIP", #True, #True) ; findet nur *.ZIP-Dateien
DB_ListByEntryS(*DB, Found(), 3, "*.zip", #True, #True) ; findet nur *.zip-Dateien
DB_ListByEntryS(*DB, Found(), 3, "*.zip", #True, #False) ; findet *.zip, *.ZIP, *.ZiP, *.zIP, ...
a²+b²=mc²
- NicTheQuick
- Ein Admin
- Beiträge: 8809
- Registriert: 29.08.2004 20:20
- Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti - Wohnort: Saarbrücken
@Kiffi:
Das mit dem MatchCase ist eine gute Idee. Das hatte ich auch noch
im Hinterkopf. Ich werde meinen Code, wenn ich mehr Zeit habe nach deiner
Idee umstellen und wieder in den ersten Post setzen.
@ts-soft:
Ein ZIP für eine kleine "Text-Datei" ist etwas übertrieben. Dann lade ich die
Datei lieber irgendwo hoch und gib einen Link dazu an. Leider kann ich das
dann immer nur zu Hause machen und nicht an der UNI. Da hab ich kein
FTP-Programm installiert. Aber vielleicht wäre es ja an der Zeit das mal zu
tun.
Ansonsten Danke für die Tests. Ich hab mich über das positive Feedback
gefreut. Für Vorschläge und Verbesserungen bin ich wie immer offen. Also
nur her damit!
@Kiffi nochmal: Wenn du weißt, dass du viele Datensätze speichern willst,
könnte das ganze noch schneller werden, wenn du die Konstante
#DB_ChunkRows erhöst. Die Rows werden nämlich immer Blockweise
allokiert um den Speicher nicht zu oft verschieben zu müssen, wer's noch
nicht gemerkt hat.
Das mit dem MatchCase ist eine gute Idee. Das hatte ich auch noch
im Hinterkopf. Ich werde meinen Code, wenn ich mehr Zeit habe nach deiner
Idee umstellen und wieder in den ersten Post setzen.
@ts-soft:
Ein ZIP für eine kleine "Text-Datei" ist etwas übertrieben. Dann lade ich die
Datei lieber irgendwo hoch und gib einen Link dazu an. Leider kann ich das
dann immer nur zu Hause machen und nicht an der UNI. Da hab ich kein
FTP-Programm installiert. Aber vielleicht wäre es ja an der Zeit das mal zu
tun.

Ansonsten Danke für die Tests. Ich hab mich über das positive Feedback
gefreut. Für Vorschläge und Verbesserungen bin ich wie immer offen. Also
nur her damit!

@Kiffi nochmal: Wenn du weißt, dass du viele Datensätze speichern willst,
könnte das ganze noch schneller werden, wenn du die Konstante
#DB_ChunkRows erhöst. Die Rows werden nämlich immer Blockweise
allokiert um den Speicher nicht zu oft verschieben zu müssen, wer's noch
nicht gemerkt hat.

- 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
Als Zip wirds aber immer gedownloadetNicTheQuick hat geschrieben: @ts-soft:
Ein ZIP für eine kleine "Text-Datei" ist etwas übertrieben. Dann lade ich die
Datei lieber irgendwo hoch und gib einen Link dazu an.


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.

Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
