Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Inhalte zweier Stream Objekte miteinander vergleichen (https://www.delphipraxis.net/13332-inhalte-zweier-stream-objekte-miteinander-vergleichen.html)

Argent27 16. Dez 2003 12:44


Inhalte zweier Stream Objekte miteinander vergleichen
 
Hallo,

ich wollte mich mal umhören ob es eine simple Möglichkeit gibt den Inhalt zweier Streams (wahrscheinlich TMemoryStream Objekte) zu vergleichen.

Thx im vorraus
Argent

choose 16. Dez 2003 12:54

Re: Inhalte zweier Stream Objekte miteinander vergleichen
 
Hallo Argent27,

eine konkrete Methode in der Klasse TStream oä ist mir nicht bekannt, Du könntest allerdings aus beiden Streams lesen, bis einer von ihnen zuende ist oder der gelesene Inhalt voneinander abweicht.
Beachten solltest Du, dass die Position innerhalb des Streams durch diesen Vergleich verändert wird und deshalb zuvor ggf gesichert werden sollte.

toms 16. Dez 2003 12:55

Re: Inhalte zweier Stream Objekte miteinander vergleichen
 
Hi,

Wie wär's mit CompareMem() ?

Argent27 16. Dez 2003 13:12

Re: Inhalte zweier Stream Objekte miteinander vergleichen
 
CompareMem sieht gut aus, wenn ich vorher noch die Size der Streams vergleiche sollte das ohne größeren Aufwand laufen.

Ich werd mal ein wenig rumtesten und meine Lösung dann noch einstellen.

choose 16. Dez 2003 13:15

Re: Inhalte zweier Stream Objekte miteinander vergleichen
 
Bitte beachte, dass der Einsatz von TMemoryStream.Memory nur dann für eine generelle Lösung sinnvoll ist, wenn Du ausschließen kannst, dass Du jemals mit anderen Streams arbeitest.
Andernfalls solltest Du ein "häppchenweises" Vergleichen (zb über 4k) innerhalb einer Schleife in Erwägung ziehen...

Argent27 16. Dez 2003 14:21

Re: Inhalte zweier Stream Objekte miteinander vergleichen
 
choose: Bei meinem aktuellen Problem habe ich tatsächlich nur mit MemoryStreams zu tun. An eine Lösung über eine Schleife hab ich auch schon gedacht, aber die wollt ich nach Möglichkeit vermeiden. :)

Ich hab hier noch ein einfaches Codebeispiel für eine mögliche Lösung:
(Für alle die mal nach dem Thema suchen)

Delphi-Quellcode:
{ Beschreibung: Vergleichen der Inhalte zweier Streams }
procedure TForm1.Button1Click(Sender: TObject);
var
Ms1, Ms2 : TMemoryStream;
begin
  // Erzeugen Streams
  Ms1 := TMemoryStream.Create;
  Ms2 := TMemoryStream.Create;
  try
    Ms1.Clear;
    Ms2.Clear;

    // Füllen mit Text aus zwei Memos
    Memo1.Lines.SaveToStream(Ms1);
    Memo2.Lines.SaveToStream(Ms2);
    // Zurücksetzen Pos
    Ms1.Position := 0;
    Ms2.Position := 0;
    // Vergleiche Länge
    if Ms1.Size = Ms2.Size then Led1.Active := True
    else Led1.Active := False;
    // Vergleiche Inhalt
    Led2.Active := comparemem(Ms1.Memory, Ms2.Memory,Ms1.Size);
  finally
    freeandNil(Ms1);
    freeandNil(Ms2);
  end;
end;

choose 16. Dez 2003 14:24

Re: Inhalte zweier Stream Objekte miteinander vergleichen
 
Zitat:

Zitat von Argent27
choose: Bei meinem aktuellen Problem habe ich tatsächlich nur mit MemoryStreams zu tun.

Sollte auch nur als Hinweis dienen.

Ich gehe zwar davon aus, dass Dein Code die Streams exemplarisch füllt, falls Dein Problem aber tatsächlich der Vergleich zweier Memos ist, sollte ein
Delphi-Quellcode:
Result:= Memo1.Text=Memo2.Text;
ausreichen.

Argent27 16. Dez 2003 14:48

Re: Inhalte zweier Stream Objekte miteinander vergleichen
 
Zitat:

Zitat von choose
Ich gehe zwar davon aus, dass Dein Code die Streams exemplarisch füllt...

Jepp so isses ! Einfach nur schnell hingekleckst um den Zweck zu erfüllen :)

Gruß
Argent

JWeis 12. Okt 2005 09:15

Re: Inhalte zweier Stream Objekte miteinander vergleichen
 
Liste der Anhänge anzeigen (Anzahl: 1)
hi leute ich hab mal den code da oben ausprobiert doch ich hab nen haufen fehler bekommen (siehe anhang)

hann mir jemand erklären warum?
und wie ich die wieder weg bekomme?

shmia 12. Okt 2005 09:59

Re: Inhalte zweier Stream Objekte miteinander vergleichen
 
Siehe Code-Library : http://www.delphipraxis.net/internal...ct.php?t=65404


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:13 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