Entwickler-Ecke
Sonstiges (Delphi) - Suchfunktion in einem Memo
Toastbrotbaby - Fr 25.05.12 23:14
Titel: Suchfunktion in einem Memo
Moin,
ich bräuchte da mal ein wenig Hilfe was ein kleines Programm angeht.
Folgendes soll es können.
Mit Hilfe von Copy/Paste möchte ich einen Text in ein (wahrscheinlich) Memo einfügen (bin da auch für andere Komponenten offen).
Der eingefügte text wird etwa so aussehen wie das Beispiel unten. Allerdings wohl mit ein paar mehr Zeilen pro Kategorie, wobei aber jeweils nur dieser Ausschnitt relevant ist.
Wie ist es nun, am besten auch recht einfach, realisierbar, Pro Kategorie jeweils von oben im Text beginnend die Anzahl pro Typ in eine einzelne Variable zu speichern und anschließend weiter runter zu gehen und dann pro Kategorie die Zahl die im Text steht zu subtrahieren.
So und da ich glaube ich habs jetzt zu kompliziert ausgedrückt nochmal anders und hoffentlich verständlicher.
Kategorie A Typ A in Variable x ... Kategorie B Typ A in Variable y - wenn das nächste mal im Text Kategorie A auftaucht soll Variable x:= x - nächster wert
und das solange bis der Text komplett "eingelesen" wurde. Sprich die Kategorien könnten sich in dem Text der eingelesen wird mehr oder weniger beliebig oft wiederholen.
Ich hoffe es ist in irgendeiner Form verständlich was ich möchte und irgendjemand hier kann mir helfen. Falls es nicht verständlich ist bitte ich um Entschuldigung, es ist spät und ich wollte den Beitrag hier noch schnell los werden. Desweiteren hoffe ich auch das ich den richtigen Teil des Forums gewählt habe, andernfalls tut mir auch das leid.
Desweiteren erwarte ich nicht das mir das jetzt hier einer gänzlich vorkaut, allerdings habe ich grad noch nicht mal einen Ansatz wie ich dort hinkomme wie ich mir das vorstelle.
Greetz
Kategorie A
Typ A B C D E
Anz. 30 283 130 50 114
Kategorie B
Typ A B C D E
Anz. 40 111 77 50 65
Kategorie C
Typ A B C D E
Anz. 10 312 66 22 50
Kategorie D
Typ A B C D E
Anz. 20 412 444 33 40
Moderiert von
Narses: Topic aus VCL (Visual Component Library) verschoben am Fr 25.05.2012 um 23:33
Narses - Fr 25.05.12 23:37
Moin!
Also ich gebe zu, ich habe noch nicht wirklich verstanden, was das werden soll. :nixweiss:
Aber ich denke, dass du die Daten aus der Textform erstmal in eine besser maschinenverarbeitbare Form bringen solltest (richtig gut wäre hier scheinbar sogar eine Datenbank, ein Objekt tut´s aber zur Not sicher auch), dann kannst du zumindest das Indizierungsproblem leicht lösen. Das auf Textbasis zu machen stelle ich mir schon unnötig kompliziert vor.
Vielleicht nochmal zu den Beispieldaten: in deinem Beispiel ist es so, dass die Kategorien auch immer vollständige Typensätze mit Wertepaaren enthalten. Ist das immer so oder gibt´s da auch Lücken? Mach doch nochmal ein Beispiel (so komplett wie möglich) mit den angegebenen Werten. :idea:
cu
Narses
Toastbrotbaby - Fr 25.05.12 23:47
Kategorie A - kurze nicht relevant info dazu
Typ A B C D E
Anz. 30 283 130 50 114
nix 11 105 2.100 4.200 1.470
dolles 53 21 1.050 1.050 840
mehr 2.520 840 15.750 23.100 14.700
so würde ein solcher block im prinzip aussehen.
zwischen den blöcken könnten allerdings noch andere sachen stehen die allerdings wieder unwichtig sind. es würde nur und ausschließlich um solche blöcke gehen.
Im Prinzip wäre es durchaus auch machbar jeweils 2 solcher blöcke per copy-paste nacheinander einzufügen und diese dann zu verarbeiten, würde auch gehen ohne größere probleme. wenn du mir ne idee liefern kannst wie das dann recht elegant abzuwickeln wäre
greetz
geht im prinzip um die differenz zwischen den werten vom anfang und vom ende. <<< wow ein satz der es gut beschreibt ;)
NUR die Anzahl pro Typ ist wichtig und die daraus resultierende Differenz
EDIT: wobei ich zu so später stunde mich recht entsinne das zwischen den werten jeweils mehr als nur 1 leerzeichen ist. weil im prinzip könnte eine typenbezeichnung ja auch aus 2 wörtern bestehen und da würde eine trennung nach einem einzelnen leerzeichen ja durchaus wieder schwierig werden oder?
jaenicke - Sa 26.05.12 00:21
Im Grunde musst du die Zeilen auseinandernehmen. Im Anhang findest du ein kleines Beispiel, das du an die echten Daten vermutlich noch etwas anpassen musst. ;-)
Toastbrotbaby - Sa 26.05.12 14:31
Moin,
ich sags mal ... dein beispiel funktioniert, das ja mal nicht schlecht ... jetzt muss ich es nur noch verstehen ;)
aber wie gesagt das was du als beispiel gebaut hast ist exakt das was ich meinte. es gibt direkt die differenz aus.
vielleicht magst mir das ein wenig näher bringen was die verständlichkeit angeht. parallel dazu werd ich mir das mal noch ne weile näher angucken in der hoffnung so schon mal was zu raffen.
aber danke dir schon mal
greetz
jaenicke - Sa 26.05.12 15:47
Die Klasse TCategoryData analysiert Text in der Methode LoadFromText und stellt diese Daten dann zur Verfügung. In dieser Methode wird nach "Kategorie " gesucht und bei einem Fund die Kategorie dahinter ausgelesen. Zwei Zeilen weiter stehen die Daten, also weren die genommen und dem Konstruktor von TCategory übergeben. Der extrahiert die einzelnen Daten.
Ist die Kategory vorhanden, wird die neue von der vorhandenen subtrahiert und wieder freigegeben. Ansonsten wird die neue Kategorie in das Dictionary hinzugefügt.
Über die Bezeichnung der Kategorie kannst du in dem Dictionary auf die einzelnen Kategorien zugreifen. Da ist übrigens noch ein kleiner Fehler. Bei der Erstellung der TCategoryData-Instanz muss angegeben werden, dass die Objekte von der Datenklasse verwaltet werden sollen:
Delphi-Quelltext
1:
| CategoryData := TCategoryData.Create([doOwnsValues]); |
War gestern schon spät. ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!