Autor Beitrag
Toastbrotbaby
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: Fr 25.05.12 23:14 
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 user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am Fr 25.05.2012 um 23:33
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: 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

_________________
There are 10 types of people - those who understand binary and those who don´t.
Toastbrotbaby Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: 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?


Zuletzt bearbeitet von Toastbrotbaby am Sa 26.05.12 00:23, insgesamt 1-mal bearbeitet
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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. ;-)
Einloggen, um Attachments anzusehen!
Toastbrotbaby Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 98



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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:
ausblenden Delphi-Quelltext
1:
  CategoryData := TCategoryData.Create([doOwnsValues]);					
War gestern schon spät. ;-)