![]() |
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 |
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. |
Re: Inhalte zweier Stream Objekte miteinander vergleichen
Hi,
Wie wär's mit CompareMem() ? |
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. |
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... |
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; |
Re: Inhalte zweier Stream Objekte miteinander vergleichen
Zitat:
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:
ausreichen.
Result:= Memo1.Text=Memo2.Text;
|
Re: Inhalte zweier Stream Objekte miteinander vergleichen
Zitat:
Gruß Argent |
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? |
Re: Inhalte zweier Stream Objekte miteinander vergleichen
Siehe Code-Library :
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10: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