![]() |
Delphi-Version: 5
TStringList gruppieren
Hallo,
Ich habe eine TStringList und möchte diese nach bestimmten Kreterien gruppieren. Leider stehe ich vollkommen auf dem Schlauch und weiß nicht wie ich an die Sache herran gehen soll.. Die Liste ist folgendermaßen aufgebaut: 0 | 12 1 | 12345 2 | 1 3 | 0 - der Strich ist nur gedanklich vorhanden! 4 | 10 5 | 12345 6 | 6 7 | 1 - 8 | 1 9 | 24657 10| 2 11| 0 - .. usw Wenn jetzt zB. jeweils der 2. Eintrag der Blöcke gleich ist, soll die zahl danach addiert werden.. Im Beispiel also: String 1 und 5 ist identisch (jeweils der 2. eines Blocks!) also sollen String 2 und 6 Addiert werden. Dann soll der kommplette Block 2 quasi gelöscht werden. Statdessen soll dort 0, Summe, Variable mit dem Summeninhalt, 0 stehen. Ich hoffe das ist verständlich. Leider habe ich wie gesagt keinen Ansatz.. Jeweils die 2. Zahl steht für eine Produktnummer.. Wenn die gleich ist, soll die 3. Zahl (Anzahl) addiert werden. Damit auf einem Blick ersichtlich ist wieviele Produkte jeweils vorhanden sind :) M.f.G. fanavity |
AW: TStringList gruppieren
Würde es denn nicht Sinn machen, die vier jeweils zusammengehörenden Werte (ein Block) in z.B. ein Record zu packen, dann die Records in eine Liste, diese sortieren nach der Artikelnummer und dann durcheiern?
|
AW: TStringList gruppieren
Wenn man statt des Records eine Klasse nimmt, lässt sich diese sogar an den jeweiligen Eintrag der Stringliste anhängen.
|
AW: TStringList gruppieren
Ich habe noch nie mit Recods gearbeitet.. Wie funktioniert das ganze denn?
|
AW: TStringList gruppieren
In Deinem Falle könnte man vllt. so etwas definieren:
Delphi-Quellcode:
und so könnte man bsp einlesen:
Type
tMyRecord = record Zeile1, Zeile2, Zeile3, Zeile4 : string [40]; end; pMyRecord = tMyRecord;
Delphi-Quellcode:
(nur so als idee, ohne Fehlerprüfung etc.)
var
recpoint:pMyrecord Liste : tList; ... while not eof(textdatei) do begin new(recpoint); readln(textdatei,recpoint^.Zeile1; readln(textdatei,recpoint^.Zeile2; readln(textdatei,recpoint^.Zeile3; readln(textdatei,recpoint^.Zeile4; Liste.add(recpoint); end; Damit könnte man dann eine TList oder eine TObjectlist befüllen und dannSortieren und was auch immer Du vorhast machen. Gruß K-H |
AW: TStringList gruppieren
Danke für die Antwort :)
Ich habe das ganze nun mal so gemacht.. Ich hoffe das ist richtig?
Delphi-Quellcode:
Type Artikel= Record
Test: String[2]; ArtName: String[6]; Anzahl : String[3]; Preis: String[2]; end;
Delphi-Quellcode:
Nur jetzt stehe ich wieder vor der Frage, wie ich darin nun sortiere/gruppiere?!
procedure TForm2.Button2Click(Sender: TObject);
Var Artikelliste: Array[0..199] of Artikel; ... Begin i := 0; j := 0; while i < test.count -1 do begin Artikelliste[j].Test:= Test.Strings[i]; i := i+1; Artikelliste[j].ArtName:= Test.Strings[i]; i := i+1; Artikelliste[j].Anzahl := Test.Strings[i]; i := i+1; Artikelliste[j].Preis:= Test.Strings[i]; i := i+1; j := j+1; end; end; |
AW: TStringList gruppieren
Zunächst mal: Es müssen nicht alles Strings sein in dem Record. Die Anzahl könntest du auch in irgendeinem Integer speichern. Dann wird das addieren nachher weniger umständlich.
Zum Problem: Statt eines Arrays mit den Records oder Klassen diese wirklich in eine T(Object)List packen, da diese eine Sortierfunktion haben. Vllt. mal nach TList sortieren suchen, um zu sehen, wie das genau geht. |
AW: TStringList gruppieren
Naja ich will ja nicht wirklich Sortieren.. Sondern mehr oder weniger nur Vergleichen und ggf addieren/ersetzten. Das hat ja im Grunde nichts mit der STort-Funktion zu tun.. Oder sehe ich das falsch?
|
AW: TStringList gruppieren
Hast schon recht. War bei mir eher ein Optimierungsgedanke, damit du nicht die Liste so oft durcheiern musst, denn unsortiert musst du das erste Element nehmen, dann die ganze Liste durchgehen und deine Additionsgechichte durchführen wann immer du das Element nochmal findest.
Dann das zweite Element nehmen und dann die ganze Liste durchgehen... Dann das dritte Element nehmen und dann die ganze Liste durchgehen... Zwei verschachtelte Schleifen ist jetzt programmiertechnisch nix wildes, aber halt suboptimal. Ist die Liste sortiert nimmst du das erste Element als Startelement. Schaust ob das/die nächste(n) gleich ist und addierst, andenfalls ist das nächste halt dein neues Startelement. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz