AGB  ·  Datenschutz  ·  Impressum  







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

Array of records zellegen

Ein Thema von IMPEGA · begonnen am 22. Mär 2023 · letzter Beitrag vom 22. Mär 2023
Antwort Antwort
IMPEGA

Registriert seit: 19. Jan 2008
Ort: Brhv
80 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Array of records zellegen

  Alt 22. Mär 2023, 06:33
Hallo.
Amateur schon wieder.
Ich habe ein Aufgabe mit Array of record , die mein Können übersteigt.

Ich habe Records in dieser Form

type
TAuto = record
Marke: string;
Farbe: string;
Baujahr: string;
KM: string;
Notiz: string;
end;

Nun erfasse ich die ganzen daten. Hier ein Abschnitt

('BMW','rot','2011','203431','')
('Toyota','blau','2022','12568','Rücksendung')
('BMW','blau','2018','58223','')
('Nissan','blau','2021','17698','Defekt')
('BMW','weiß','2022','14924','')
('Toyota','blau','2020','29164','')

So geht es weiter, es sind immer unterschiedliche Daten

Nun zu meinem Vorhaben. Ich möchte möglichst einfach und schnell (Datensätze sind relativ groß 5-50Mb groß)
jede Marke in ein separates Array erfassen

Sortieren kann ich, brauche aber die Daten i je einem Array. Also diesen Array in Array of Array of Records übertragen
Der Weg wäre egal, ob neue Arrays erstellt werden oder in vorhandene Arrays übertragen. Man kann Sie danach zusammenfügen.
Aber, ich kenne nie die Zahl der Fahrzeuge und welche Marke heute erfasse wird.
Es ist jedes Mal anders. Also kann ich nicht einfach sagen, ich erfasse alle BMW, dann Toyota u.s.w. Welche Name auftaucht ist nicht zu bestimmen.
Ach ja, weil noch Fehler in der Form auftauchen. Marzedes, Merzedez u.s.w
Ich muss einfach erst die Marke erkennen und in gleichnamige Array mit der Marke hinzufügen. Selbst wenn es TOOOOyotaaa heißt

('BMW','rot','2011','203431','')
('BMW','blau','2018','58223','')
('BMW','weiß','2022','14924','')


('Toyota','blau','2022','12568','Rücksendung')
('Toyota','blau','2020','29164','')


('Nissan','blau','2021','17698','Defekt')


Bitte um Impulse, wie ich es machen kann. Ich wiederhole, Datensätze sind meist ziemlich groß.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.757 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Array of records zellegen

  Alt 22. Mär 2023, 06:40
.. auch wenn es am Thema vorbeigeht, schonmal über eine (sql) Datenbank nachgedacht?
Das schreit ja förmlich danach.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
IMPEGA

Registriert seit: 19. Jan 2008
Ort: Brhv
80 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Array of records zellegen

  Alt 22. Mär 2023, 07:34
Nein, kann ich nicht. Ich bekomme die daten schon in der Form. Möchte hier nicht die Details erklären.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.362 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Array of records zellegen

  Alt 22. Mär 2023, 08:09
Nein, kann ich nicht. Ich bekomme die daten schon in der Form.
Egal wie du sie bekommst:
Du kannst sie auch im Speicher in ein Dataset packen und dann damit arbeiten, ohne die Daten irgendwo auf einem Datenträger zu speichern.

Du könntest auch mit Array von Pointern für die einzelnen Marken arbeiten, womit das Kopieren der Recordinhalte wegfiele.

Wenn du aber vorher ein großes Array und hinterher mehrere kleine Arrays hast und das "nicht verhandelbar" ist, bleibt nicht viel Optimierungspotential übrig. Dass du die Länge der Ziel-Arrays am Anfang oder in Schritten setzen solltest und am Ende korrigieren, dürfte klar sein. Viel mehr kannst du dann aber kaum tun.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
IMPEGA

Registriert seit: 19. Jan 2008
Ort: Brhv
80 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Array of records zellegen

  Alt 22. Mär 2023, 09:17
Danke erstmal.

Das klingt nicht gerade vielversprechend.
Shit, ich habe gehofft, Ihr habt irgendwelche Tricks auf Lager.
Zaubern kann man aber nicht, das ist mir schon klar.

Das ist kein Profi bin und etwas überfordert bin, sollte auch klar sein. Array in Verbindung mit Pointer, scheint mir doch etwas zu kompliziert für mich.
@jaenicke Könntest du mir nur ein sehr einfaches Beispiel zeigen. Nur um zu sehen, ob ich es angreifen mag.
Nur um zu sehen ob ich es überhaupt versuchen soll.

Ich werte zwar noch weiter Antworten ab, mache mir da aber kaum Hoffnung auf leichte Lösung.
Momentan, ist das ein Kraftakt. Ich sortiere mein Array und kopiere praktisch per Hand immer die passenden Gruppen heraus.

Geändert von IMPEGA (22. Mär 2023 um 09:20 Uhr)
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.111 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Array of records zellegen

  Alt 22. Mär 2023, 09:35
Dass du alle Daten in Records bereits im Speicher hast ist doch eigentlich was cooles. Das mit der SQL-Datenbank war sicher gut gemeint, aber nur um Sortierung/Gruppierung nicht selbst machen zu müssen würde ich das jetzt auch als Overkill empfinden.

Mit den in Delphi enthaltenen Bordmitteln macht das Filtern, Gruppieren und sonstiges aber auch wirklich keinen Spaß. Ich würde dir wirklich empfehlen, dir mal die Spring4D-Bibliothek für Delphi anzuschauen, die darin enthaltenen Collections sind großartig und erinnern mit ihren Möglichkeiten zur Filterung und Sortierung an LINQ aus .NET.

Hier ein Beispiel für deine Autos:
Delphi-Quellcode:
   bmws := autos.Where(
      function(const auto: TAuto): Boolean
      begin
         Result := (auto.Marke = 'BMW');
      end
   );
Oder du willst nur wissen, ob von den BMWs wenigstens einer defekt ist:

Delphi-Quellcode:
bmws.Any(
      function(const auto: TAuto): Boolena
      begin
         Result := (auto.Notiz = 'Defekt')
      end
   )
Um ein paar vernünftige Collections mit den Möglichkeiten kommt man mittelfristig eigentlich nicht umher, haben andere Programmiersprachen ja auch schon direkt in ihrer Standardbibliothek. Wärmste Empfehlung: Schau dir Spring4D mal an, danach weißt du nicht mehr, wie du jemals ohne konntest.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.362 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Array of records zellegen

  Alt 22. Mär 2023, 10:26
Das ist kein Profi bin und etwas überfordert bin, sollte auch klar sein. Array in Verbindung mit Pointer, scheint mir doch etwas zu kompliziert für mich.
@jaenicke Könntest du mir nur ein sehr einfaches Beispiel zeigen. Nur um zu sehen, ob ich es angreifen mag.
Das ist von der Verwendung her kaum anders als du es aktuell vermutlich machst. Auch die Sortierung wäre mit Pointern sehr viel schneller.
Delphi-Quellcode:
type
  TAuto = record
    Marke: string;
    Farbe: string;
    Baujahr: string;
    KM: string;
    Notiz: string;
  end;
  PAuto = ^TAuto;

var
  MyBaseArray: TArray<TAuto>;
  MySortArray: TArray<PAuto>;

  SetLength(MySortArray, Length(MyBaseArray));

  // extrahieren der Pointer als Array
  SetLength(MySortArray, Length(MyBaseArray));
  for i := Low(MyBaseArray) to High(MyBaseArray) do
    MySortArray[i] := @MyBaseArray[i];

  // Zugriff
  MySortArray[i].Baujahr := '1'; // compiler magic / pointer magic, keine Dereferenzierung notwendig
  MySortArray[i]^.Baujahr := '1';

Schau dir Spring4D mal an, danach weißt du nicht mehr, wie du jemals ohne konntest.
Ja, damit kann man sehr viel machen, aber bei größeren Datenmengen muss man auch auf die Performance achten. Spring4D ist da zwar sehr gut, aber es hat natürlich trotzdem einen gewissen Overhead. Da muss man dann schauen, was im konkreten Anwendungsfall wichtiger ist: Der Komfort der Spring4D Bibliothek oder die Performance.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  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 23:06 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