AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Welchen Typ für mehrdimensionalen Buffer verwenden?
Thema durchsuchen
Ansicht
Themen-Optionen

Welchen Typ für mehrdimensionalen Buffer verwenden?

Ein Thema von hirnstroem · begonnen am 10. Nov 2006 · letzter Beitrag vom 10. Nov 2006
Antwort Antwort
hirnstroem

Registriert seit: 21. Sep 2005
297 Beiträge
 
Delphi 2006 Professional
 
#1

Welchen Typ für mehrdimensionalen Buffer verwenden?

  Alt 10. Nov 2006, 15:32
'loha Folks,

ich suche momentan den idealen Typ zur Realisierung eines mehrdimensionalen Buffers.

Folgendes Szenario:

Über den COM-Port werden Daten eingelesen, mit der Urhzeit und einer BenutzerID ergänzt und in einen Buffer geschoben. Die Daten(sätze) warten in diesem Buffer auf ihre Weiterverarbeitung (bis sie gelöscht werden im Endeffekt).

Prinzipiell käme dies ja dem schreiben eines Datensatzen in eine Datenbank gleich.

Nun bin ich mir nicht sicher, wie man diesen Buffer genau aufbauen soll.

Meine Idee wäre folgende:
Delphi-Quellcode:
  TInputBuffer = record
    User: TStringList;
    Data: TStringList;
    Time: TStringList;
  end;
Die StringList deshalb, weil man sich da um nichts kümmern muss, d.h., Zeilen können einfach hinzugefügt und entfernt werden. Also double linked list like.

Ist dies eine gute Idee? Wenn nein, wie wäre es besser?

Danke und Gruss
hirnstroem
inde deus abest
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#2

Re: Welchen Typ für mehrdimensionalen Buffer verwenden?

  Alt 10. Nov 2006, 17:47
Hi,
ich bin mir nicht ganz sicher, ob ich alles richtig verstanden habe. Ehrlich gesagt sehe ich nämlich nicht ganz den Grund, warum du drei StringListen verwaltest.

Wenn ich alles richtig verstanden habe, dann bekommst du eine bestimmte Anzahl n von Daten, die du um zwei weitere Informationen erweiterst. Jedes Datum wird einfach in einer Warteschlange abgelegt und irgendwer kümmert sich dann von Zeit zu Zeit mal um die Schlange.
Das ganze spricht eigentlich mehr dafür, dass du einen Datentypen benutzt, der sich aus den drei einzelnen Informationen zusammensetzt. Immerhin gehört die Benutzer-Information und die Zeitangabe zu dem Datum, dass empfangen wurde.
Deshalb einfach einen Datentypen erstellen, der die entsprechende Form hat (ich bleib mal hier bei Strings, kannst du aber natürlich beliebig anpassen):
Delphi-Quellcode:
type
  TInput = record
    user : String;
    data : String;
    Time : String;
  end;
Was du nun eigentlich suchst wäre dann eine Struktur um eine Menge dieser Daten zu verwalten. Es bietet sich hier im übrigen der Datentyp einer (Warte-)Schlange/Queue an. Wie Listen ist das ein abstrakter Datentyp, du kannst ihn z.B. durch eine Liste realisieren. Die einfache Idee ist, dass du FirstIn-FirstOut realisierst. Es gibt eine Möglichkeit für dich ein Datum anzuhängen, zu schauen wie viele Elemente in der Liste sind und wenn sich mindestens ein Element in der Liste befindet, kannst du das erste Element entfernen.
Es kommen natürlich noch andere Möglichkeiten in Frage, aber die hier sollte es schon sehr gut tun. Wie gesagt, der Datentyp ist abstrakt, du kannst dir hier also selbst überlegen ob und wie du den implementieren möchtest.
An sich kannst du eigentlich sehr direkt mit einem TList Objekt arbeiten. Eine TList ist eine einfache Form von Liste, die dir alles mögliche schon ermöglicht. Du hast sogar einen Wahlfreien Zugriff auf einzelne Elemente (intern wird ein Array verwendet).

Eigentlich musst du nur ein TInput erzeugen und mittels der Add Funktion an die Liste anhängen. Beim entfernen musst du noch casten (Listen speichern nur allgemeine Zeiger), fertig.
Etwas schöner geht das ganze noch, wenn du statt einem Record eine Klasse erzeugst. Diese kannst du dann in einer TObjectList verwalten. Der größte Vorteil liegt dann darin, dass die TObjectList auch alle Instanzen frei geben kann, wenn sie zerstört wird, bei einer TList musst du dich selbst drum kümmern.

Gruß Der Unwissende
  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 03:40 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