AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Artikelgruppe aus Artikelnummer *schnell* ermitteln
Thema durchsuchen
Ansicht
Themen-Optionen

Artikelgruppe aus Artikelnummer *schnell* ermitteln

Ein Thema von BlueStarHH · begonnen am 1. Jul 2018 · letzter Beitrag vom 3. Jul 2018
Antwort Antwort
Seite 1 von 2  1 2      
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#1

Artikelgruppe aus Artikelnummer *schnell* ermitteln

  Alt 1. Jul 2018, 14:57
Wir haben hier Artikelnummnern rein aus Zahlen wie z.B.

5462155
76543887

Diese beginnen immer mit einer unterschiedlich langen Artikelgruppennummer. Zur Verdeutlichung *hier* durch einen Bindestrich abgegrenzt:

54-62155
5655-43887
64373-1

Zu einer Artikelnummer möchte ich nun die Artikelgruppennummer zusammen mit der Artikelgruppe ermitteln. Dazu gibt es diese Artikelgruppenliste:

...
52 Toner schwarz
53 Toner blau
54 Toner rot
...
5654 Papier A5
5655 Papier A4
...
64373 Klebefilm

5462155 wäre also ein "Toner rot". Da die Artikelnummer mit 54 beginnt.

Die Artikelgruppennummer ist immer eindeutig. Es gibt keine Überschneidungen.

Wie bekommt man das schnell hin, ohne jeden einzelnen Eintrag aus der Artikelgruppenliste mit der Artikelnummer abzugleichen?

Manchmal hilft es auch es nochmal aufzuschreiben, denn während ich das hier schreibe hat mich das und etwas googlen auf einen "Trie". Als Lösung geführt:
https://de.wikipedia.org/wiki/Trie Zitat im Abschnitt "Anwendungen":
Präfixanfragen der Art „Welche Zeichenketten in S beginnen mit dem Muster M?“

Das scheint hier also die Lösung zu sein. Gibt es da für Delphi schon etwas fertiges?
  Mit Zitat antworten Zitat
Benutzerbild von blawen
blawen

Registriert seit: 1. Dez 2003
Ort: Luterbach (CH)
677 Beiträge
 
Delphi 12 Athens
 
#2

AW: Artikelgruppe aus Artikelnummer *schnell* ermitteln

  Alt 1. Jul 2018, 16:04
Die Artikelgruppennummer ist immer eindeutig. Es gibt keine Überschneidungen.
Wenn es wirklich jeweils eindeutig ist, würde ich mit Delphi-Referenz durchsuchenPos oder Delphi-Referenz durchsuchenposex arbeiten.

Ich habe bei mir z.B. die Situation, dass ich einen eingescannten Barcode (1D / 2D) identifizieren muss und daraus definierte Werte extrahieren muss (Seriennummer, Chargennummer, etc.).
Zu diesem Zweck registriere ich einen neuen Barcodetypen einmalig und identifiziere diese danach anhand meines definierten "Daumenabdruckes" (Anzahl Zeilen und Zeichen, Erkennungsmuster, etc.)
Roland

Geändert von blawen ( 1. Jul 2018 um 16:09 Uhr)
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
849 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Artikelgruppe aus Artikelnummer *schnell* ermitteln

  Alt 1. Jul 2018, 16:24
Die Artikelgruppennummer ist immer eindeutig. Es gibt keine Überschneidungen.
Wenn es wirklich jeweils eindeutig ist, würde ich mit Delphi-Referenz durchsuchenPos oder Delphi-Referenz durchsuchenposex arbeiten.
Danke, aber das ist zu langsam. Denn damit müsste ich im schlimmsten Fall bei jeder Artikelnummer die gesamte Liste aller Artikelgruppen durchgehen, wenn erst der letzte Eintrag in der Artikelgruppen-Liste ein Treffer ist. Wie gesagt geht es bei der Fragestellung nicht darum, es irgendwie sondern möglichst schnell hinzubekommen, da diese Suche sehr oft ausgeführt wird und die Liste sehr lang ist. Ziel ist es, dass der User in der GUI bei der Suche keinerlei Wartezeit wahrnimmt.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Artikelgruppe aus Artikelnummer *schnell* ermitteln

  Alt 1. Jul 2018, 16:28
Ich würde das durch ein geeignetes Datenbankmodell lösen.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Artikelgruppe aus Artikelnummer *schnell* ermitteln

  Alt 1. Jul 2018, 16:36
Wenn Zahlen tatsächlich Unique sind, egal in welcher Kombination, vielleicht einfach drei verschiedene DB abfragen mit jeweils anderem Trenner, eine der drei sollte ja dann als "Positiv" rauskommen, oder versteh ich da was falsch?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von blawen
blawen

Registriert seit: 1. Dez 2003
Ort: Luterbach (CH)
677 Beiträge
 
Delphi 12 Athens
 
#6

AW: Artikelgruppe aus Artikelnummer *schnell* ermitteln

  Alt 1. Jul 2018, 16:41
Die Artikelgruppennummer ist immer eindeutig. Es gibt keine Überschneidungen.
Wenn es wirklich jeweils eindeutig ist, würde ich mit Delphi-Referenz durchsuchenPos oder Delphi-Referenz durchsuchenposex arbeiten.
Danke, aber das ist zu langsam. Denn damit müsste ich im schlimmsten Fall bei jeder Artikelnummer die gesamte Liste aller Artikelgruppen durchgehen, wenn erst der letzte Eintrag in der Artikelgruppen-Liste ein Treffer ist. Wie gesagt geht es bei der Fragestellung nicht darum, es irgendwie sondern möglichst schnell hinzubekommen, da diese Suche sehr oft ausgeführt wird und die Liste sehr lang ist. Ziel ist es, dass der User in der GUI bei der Suche keinerlei Wartezeit wahrnimmt.
Wenn Du den Barcode anhand von offensichtlichen Merkmalen einschränkst (ein-/mehrzeilig, Anzahl Zeichen 1. Zeile/Gesamt,...) reduziert sich die "Wartezeit" erheblich, in meinem Anwendungsfall stelle ich keine Verzögerung fest.
In meinem konkreten Fall muss ich z.B. beim einen Barcode die Chargennummer auslesen, beim nächsten die Cargen-/Serien- und IMEI-Nummer, gleichzeitig muss der Code auch einem Artikel zugeordnet werden können. Die Merkmale habe ich in der Datenbank abgelegt und lese sie beim Programmstart in den Speicher.
Roland
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.205 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Artikelgruppe aus Artikelnummer *schnell* ermitteln

  Alt 1. Jul 2018, 22:30
Ich würde mir eine Tabelle machen, wo du - einmalig - Artikelnummer + Artikelgruppe ablegst. Oder auch ein neues Feld in der Artikel-Tabelle. Dann kannst du das abrufen + musst nichts ermitteln.

Wenn du lustig bist, machst du einen Trigger, der dir das aktuell hält.
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#8

AW: Artikelgruppe aus Artikelnummer *schnell* ermitteln

  Alt 2. Jul 2018, 07:17
Das scheint hier also die Lösung zu sein. Gibt es da für Delphi schon etwas fertiges?
Es gibt diverse fertige Aho-Corasick-Implementierungen in Delphi. AC ist ein Algorithm für die Suche nach mehreren Strings gleichzeitig. Ist der Suchbaum einmal aufgebaut, ist die Suche in einer Artikelnummer ziemlich schnell, da jedes Zeichen nur einmal verglichen (und der zugehörige Pfad im Baum gefunden) werden muss. Und da sich Artikelgruppen nicht oft ändern dürften, müsste der Baum nur selten neu gebaut werden.

(edit sagt, dass AC natürlich schon Overkill ist, weil es auch nach Position 0 noch sucht... aber eine fertige getestete Implementierung ist halt auch was wert, alternativ könntest Du die entsprechenden Pfade im Baum einfach weglassen)

Geändert von CCRDude ( 2. Jul 2018 um 07:26 Uhr)
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#9

AW: Artikelgruppe aus Artikelnummer *schnell* ermitteln

  Alt 2. Jul 2018, 11:18
Ich würde mir eine Tabelle machen, wo du - einmalig - Artikelnummer + Artikelgruppe ablegst. Oder auch ein neues Feld in der Artikel-Tabelle. Dann kannst du das abrufen + musst nichts ermitteln.

Wenn du lustig bist, machst du einen Trigger, der dir das aktuell hält.
Würde ich auch bevorzugen! Und ggF. mal mit Sorgfalt an einen Umbau/Anpassung des DM denken, wie es mkinzler vorschlägt.

Ansonsten, ist das wirklich eindeutig?
Zitat:
52 Toner schwarz
53 Toner blau
54 Toner rot
...
5654 Papier A5
5655 Papier A4
...
64373 Klebefilm

5462155 wäre also ein "Toner rot". Da die Artikelnummer mit 54 beginnt.
Habt Ihr nur 100 (bzw. 99) Artikelgruppen? Oder wechselt ihr irgendwo die Stellenanzahl?
Das würde noch mehr für eine Modellverbesserung sprechen.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Artikelgruppe aus Artikelnummer *schnell* ermitteln

  Alt 2. Jul 2018, 11:37
Das erinnert mich an Telefonnummern, bei denen man ja auch nach einer unterschiedlichen Ziffernanzahl auf unterschiedlichen Organisationsebenen landet.
Dementsprechend würde ich einen Suchbaum aufbauen,
und bei Gelegenheit die Artikelnummern überholen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:31 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz