AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TStringList gruppieren

Ein Thema von fanavity · begonnen am 28. Sep 2011 · letzter Beitrag vom 28. Sep 2011
Antwort Antwort
fanavity

Registriert seit: 2. Sep 2011
65 Beiträge
 
#1

TStringList gruppieren

  Alt 28. Sep 2011, 08:02
Delphi-Version: 5
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
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
 
Delphi 6 Enterprise
 
#2

AW: TStringList gruppieren

  Alt 28. Sep 2011, 08:43
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?
Ralph
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#3

AW: TStringList gruppieren

  Alt 28. Sep 2011, 08:46
Wenn man statt des Records eine Klasse nimmt, lässt sich diese sogar an den jeweiligen Eintrag der Stringliste anhängen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
fanavity

Registriert seit: 2. Sep 2011
65 Beiträge
 
#4

AW: TStringList gruppieren

  Alt 28. Sep 2011, 09:05
Ich habe noch nie mit Recods gearbeitet.. Wie funktioniert das ganze denn?
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

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

AW: TStringList gruppieren

  Alt 28. Sep 2011, 10:31
In Deinem Falle könnte man vllt. so etwas definieren:
Delphi-Quellcode:
Type
 tMyRecord = record
               Zeile1,
               Zeile2,
               Zeile3,
               Zeile4 : string [40];
             end;
pMyRecord = tMyRecord;
und so könnte man bsp einlesen:
Delphi-Quellcode:
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;
(nur so als idee, ohne Fehlerprüfung etc.)

Damit könnte man dann eine TList oder eine TObjectlist befüllen und dannSortieren und was auch immer Du vorhast machen.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
fanavity

Registriert seit: 2. Sep 2011
65 Beiträge
 
#6

AW: TStringList gruppieren

  Alt 28. Sep 2011, 10:35
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:
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;
Nur jetzt stehe ich wieder vor der Frage, wie ich darin nun sortiere/gruppiere?!

Geändert von fanavity (28. Sep 2011 um 10:38 Uhr)
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
 
Delphi 6 Enterprise
 
#7

AW: TStringList gruppieren

  Alt 28. Sep 2011, 12:10
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.
Ralph
  Mit Zitat antworten Zitat
fanavity

Registriert seit: 2. Sep 2011
65 Beiträge
 
#8

AW: TStringList gruppieren

  Alt 28. Sep 2011, 14:10
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?
  Mit Zitat antworten Zitat
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.737 Beiträge
 
Delphi 6 Enterprise
 
#9

AW: TStringList gruppieren

  Alt 28. Sep 2011, 16:10
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.
Ralph
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:28 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