AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Grundlegende Frage zur Strukturierung von Records und tList
Thema durchsuchen
Ansicht
Themen-Optionen

Grundlegende Frage zur Strukturierung von Records und tList

Offene Frage von "BoolString"
Ein Thema von BoolString · begonnen am 2. Feb 2009 · letzter Beitrag vom 4. Feb 2009
 
BoolString

Registriert seit: 2. Feb 2009
Ort: Varel
70 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Grundlegende Frage zur Strukturierung von Records und tList

  Alt 2. Feb 2009, 23:06
Schönen guten Abend,

ich war früher viel in einem anderen Forum unterwegs, welches aber leider geschlossen wurde. Aus dem Grund mache ich jetzt meine ersten Versuche hier auf Delphi-Praxis. Mögliche Fehlbedienungen möge man mir nachsehen

Ich habe ein seit längerem andauerndes Projekt, bei dem ich eine Anzahl von Strings verwalte. Jedes Zeichen eines Strings steht für Objekte (Amino- oder Nukleinsäuren) und ich führe darauf Wiederholungs- und Ähnlichkeitsanalysen durch. Jeder String ist ein Teil eines Records und trägt zusätzlich eine Feld für einen Namen. Die Strings verwalte ich in einer tList. Die grundlegende Idee habe ich im folgenden einmal skizziert:

Delphi-Quellcode:
Type
  pOneSequence = ^tSequence;

  tSequence = Record
                Name : String;
                Data : String;
              end;

tSequenceList = class(TObject)
  Private
    fSequenceList : tList;

  Public
    Constructor Create;
    Destructor Destroy;
    Function NewSequence : Integer;
    Function SortListAscendingByName : Boolean;
    // [...]
  end;

Implementation
Constructor tSequenceList.Create;
Begin
  Inherited Create;
  fSequenceList := TList.Create;
end;



Destructor tSequenceList.Destroy;
Var i : Integer;
    aRecord : pOneSequence;
Begin
 For i := fSequenceList.Count - 1 downto 0 do
 Begin
   aRecord := fSequenceList.Items[i];
   Dispose (aRecord);
   fSequenceList.Delete (i);
 end;

 Inherited Destroy;
end;

Function CompareNamesAscending(Item1, Item2: Pointer): Integer;
Begin
  Result := AnsiStrIComp (PChar (pOneSequence(Item1)^.Name), PChar (pOneSequence (Item2)^.Name));
end;


Function tSequenceList.SortListAscendingByName : Boolean;
Begin
  Try
    fSequenceList.Sort (@CompareNamesAscending);
    Result := True;
  Except
    Result := False;
  end;
end;

Durch einige Weiterentwicklungen würde ich ein ähnliches System nun gerne für Zahlen und Matritzen anwenden. Dazu ist meine Überlegung, daß ich den Datentyp tSequence erweitere. Leider geht natürlich so etwas nicht:

Delphi-Quellcode:
 tSequenceType = (seqNumericList = 0,
                  seqNumericArray = 1,
                  seqString = 2);

 t1dVariantArrayDouble= Record
                            Title : String;
                            RowTitles : Array of String;
                            Cells : Array of Double;
                          end;

 t2dVariantArrayDouble= Record
                            Title : String;
                            RowTitles : Array of String;
                            ColTitles : Array of String;
                            Cells : Array of Array of Double;
                          end;

 tSequence = Record
                Name : String;
                Case SeqType : tSequenceType of
                   seqNumericList : (Data : t1dVariantArrayDouble);
                   seqNumericArray : (Data : t2dVariantArrayDouble);
                   seqText : (Data : String);
                end;
Als einfachstes Rumpfuschen bestünde nun die Option einen klassischen Record zu verwenden und dort alle offenen Arrays drin zu implementieren. Die Teile die genutzt werden würden gesetzt, der Rest auf die Länge Null minimiert. Letztlich geht es mir um die Frage des Datendesigns und wie man es am sinnigsten implemetieren kann.

Es ist mir klar, daß ich viel ändern muss, wenn ich zukünftig auch solch unterschiedlichen Elemente bearbeiten will, aber die Frage ist nun wie geht man da am Besten ran. Hierzu bin ich nun brennend dran interessiert, was andere Leute für Lösungsansätze wählen würden.

Da die Funktionalität des Programms in der letzten Zeit deutlich an Umfang zugenommen hat, ist damit zu rechnen, daß später evtl. noch andere Datentypen in der Liste untergebracht werden können. Jetzt ist noch so einer der letzten Punkte, daß ich 'Altlasten' ausbügeln kann.

Momentan erscheint mir am sinnigsten, daß man hier evtl. zwei Klassen aufbaut. Die eine, die Daten verwaltet, die andere die Objekte der ersten Klasse verwaltet. Oder hat noch jemand andere Ideen? Falls ja, wie würde sich das dann äußern, bzw. wie würde es dann aussehen. Ich bin momentan in der verzwickten Lage, das ich eines dieser als 'Quick'n'dirty' geplanten Programme versuche auf eine evtl. zukunftsweisende Richtung umzustellen (auch wenn es bisher nur umsonst für einen kleinen Nutzerkreis zur Verfügung gestellt ist...)

Liebe Grüße, bin gespannt auf Ideen und Umsetzungsvorschläge...

BoolString;
  Mit Zitat antworten Zitat
 


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 16:27 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