Seite 3 von 9

Verfasst: 17.08.2006 23:29
von NicTheQuick
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.

Verfasst: 18.08.2006 12:17
von NicTheQuick
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:

Code: Alles auswählen

Interface Test
  Methode(hallo.l())
EndInterface
Während das hier geht:

Code: Alles auswählen

Procedure Test_Methode(hallo.l())
EndProcedure
Also widme ich mich erstmal den Wildcards. :)

Verfasst: 18.08.2006 17:11
von NicTheQuick
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?
Der neue Code wie immer im ersten Post

Verfasst: 18.08.2006 21:25
von ts-soft
Vielleicht beim nächstem Update zusätzlich als Zip anbieten, 1225 Zeilen
kopieren ist nicht so das Wahre :wink:

Verfasst: 19.08.2006 00:54
von Kiffi
NicTheQuick hat geschrieben:So, es ist vollbracht.
Super! Den ersten 'Extremtest' (scannen meiner C-Partition und eintragen
der gefundenen Dateien) hat Deine 'DB' schon mal klaglos überstanden ;-)
Morgen geht's an die Suchfunktionen :D

Vielen Dank für Deine Mühen! :allright:
ts-soft hat geschrieben:1225 Zeilen kopieren ist nicht so das Wahre
Weichei! ;-)

Grüße ... Kiffi

Verfasst: 19.08.2006 01:15
von ts-soft
Kiffi hat geschrieben:
ts-soft hat geschrieben:t;]1225 Zeilen kopieren ist nicht so das Wahre
Weichei! ;-)

Grüße ... Kiffi
Ne, kaputte Maus :mrgreen:

Verfasst: 19.08.2006 12:50
von Kiffi
Funktioniert bisher alles sehr zufriedenstellend :allright:

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)
In DB_SelectRowByEntryS()

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
in DB_ListByEntryS()

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
Aufruf wie folgt:

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, ...
Danke & Grüße ... Kiffi

Verfasst: 19.08.2006 19:52
von NicTheQuick
@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. :wink:

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. :wink:

Verfasst: 19.08.2006 22:34
von ts-soft
NicTheQuick 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.
Als Zip wirds aber immer gedownloadet :wink: . *.pb wird mir als Text angezeigt :mrgreen:

Verfasst: 20.08.2006 12:21
von bluejoke
Rechte Maustaste, speichern unter... Naja, weisst du bestimmt, aber sowas zu zippen finde ich auch übertrieben, wiegt doch kaum mehr als ne normale Webseite.