AGB  ·  Datenschutz  ·  Impressum  







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

Record zurücksetzen (löschen)

Ein Thema von Guido Eisenbeis · begonnen am 14. Sep 2008 · letzter Beitrag vom 10. Okt 2008
 
Guido Eisenbeis

Registriert seit: 9. Apr 2006
389 Beiträge
 
Delphi 10.3 Rio
 
#11

Re: Record zurücksetzen (löschen)

  Alt 14. Sep 2008, 12:29
@Michael:
Danke für das "Entschrummpeln" der Forumsansicht!


Zitat von Luckie:
Oder besser noch, sag uns, was du eigentlich vor hast.
Zitat von sirius:
Was heißt den löschen?
Record löschen, zurücksetzen, oder wie Marius schrieb "Alle Felder leeren", also alle Werte des Records auf einen Anfangswert setzen. Z. B. Strings auf '' (leer), Integer auf 0, ...

Was ich vorhabe:

Zum einen will ich hierbei meinen Delphi-Horizont erweitern. Bisher habe ich bei Records eine Routine geschrieben, in der alle Felder auf einen definierten Wert gesetzt wurden. Beispiel:

Delphi-Quellcode:

Type
  TMyRecord = record
    Test_1 : string;
    Test_2 : string;
    Integer_1 : Integer;
    Integer_2 : Integer;
  end;


function PrepareMsg(AMyRecord: TMyRecord): string;
begin
  Result :=
    'Test_1: ' + AMyRecord.Test_1 + #13#10+
    'Test_2: ' + AMyRecord.Test_2 + #13#10+
    'Integer_1: ' + IntToStr(AMyRecord.Integer_1) + #13#10+
    'Integer_2: ' + IntToStr(AMyRecord.Integer_2);
end;


procedure ResetMyRecord(var AMyRecord: TMyRecord);
begin
  AMyRecord.Test_1 := '';
  AMyRecord.Test_2 := '';
  AMyRecord.Integer_1 := 0;
  AMyRecord.Integer_2 := 0;
end;


procedure SetTestValues(var AMyRecord: TMyRecord);
begin
  AMyRecord.Test_1 := 'Hallo ';
  AMyRecord.Test_2 := 'Welt!';
  AMyRecord.Integer_1 := 9;
  AMyRecord.Integer_2 := 2008;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  MyRecord: TMyRecord;
begin
  // undefinierte AnfangsWerte (beim ersten Test erscheinen hier Zufallswerte)
  ShowMessage(PrepareMsg(MyRecord));

  // BeispielWerte zuweisen
  SetTestValues(MyRecord);
  ShowMessage(PrepareMsg(MyRecord));

  // mit "händischer" Lösung auf definierte AnfangsWerte setzen
  ResetMyRecord(MyRecord);
  ShowMessage(PrepareMsg(MyRecord));

  // BeispielWerte zuweisen
  SetTestValues(MyRecord);
  ShowMessage(PrepareMsg(MyRecord));

  // "FillChar"-Lösung
  Finalize(MyRecord);
  FillChar(MyRecord, SizeOf(MyRecord), 0);
  ShowMessage(PrepareMsg(MyRecord));
end;
Nun will ich zum Einen wissen, ob es da eine einfachere Möglichkeiten gibt, um meinen Code kürzer und übersichtlicher zu halten.
Zum Anderen hat die obige "händische" Lösung zwar den Vorteil, dass man selbst definierte Werte erhält, aber den Nachteil, dass das bei umfangreicheren Records schnell recht aufwendig wird. Hinzu kommt, dass in meinem konkretten Fall (Verknüpfungen auslesen) mein Record auch noch einen weiteren Record enthält. Da ist dann die Frage, wie weit die händische Lösung sinnvoll ist.

Delphi-Quellcode:
type
  TMyRecord = record
    Test_1 : string;
    Test_2 : string;
    Integer_1 : Integer;
    Integer_2 : Integer;
    FindData: TWIN32FINDDATA; // <-- weiterer Record in meinem Record
  end;

@toms

Die "MyBlankRecord"-Lösung entspricht in meiner Auffassung der "händischen" Lösung, ist hier also nicht gewollt.

Die "FillChar"-Lösung erscheint mir eher als eine Lösung in meinem Sinne. Gewünscht ist eine Lösung mit kurzem Code, die schon-vorhandene Delphi Routinen benutzt. Und das wäre hierbei der Fall. Und es schein sogar recht elegant zu sein.

OK, nach ersten Tests (siehe Komplett-Code oben) scheint die "FillChar"-Möglichkeit tatsächlich die gewünschte "elegange" Lösung zu sein. Ich werde nun noch Test mit dem zusätzlichen Record in meinem Record (FindDate: TWIN32FINDDATA) durchführen.


@Ronny
Meines Wissens nach werden mit FillChar auch die Strings auf "0" gesetzt (komplett mit Nullen gefüllt, also sozusagen Null-terminiert). Das entspricht einem leeren String und ist das gewünschte Ziel.

Mal sehen, was die anderen sagen.

Guido.
  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 14:01 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-2025 by Thomas Breitkreuz