[delphi] memorystream

Pagina: 1
Acties:

  • jopiek
  • Registratie: September 2000
  • Laatst online: 21-08 19:56

jopiek

Tja... 'ns ff denken.

Topicstarter
ik heb een memorystream met text en wil deze text veranderen alvorens deze verder als memorystream door te sturen...

dus memorystream->text veranderen->memorystream

hoe kan ik dit op de meest efficiente wijze doen (het gaat om html dat van een IdHTTP komt en - na gewijzigd te zijn - doorgestuurd wordt naar een twebbrowser...

ik krijg wat vage problemen met buffers en zo...

Cogito Ergo Credo


  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 21-09 18:16

Creepy

Tactical Espionage Splatterer

Wat voor "vage" problemen met buffers? Wat heb je al? Wat gaat er mis? :)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


  • kvdveer
  • Registratie: November 2000
  • Laatst online: 06-11-2025

kvdveer

Z.O.Z.

Iets meer info zou inderdaad de oplosbaarheid van je problemen verhogen.

Localhost, sweet localhost


  • jopiek
  • Registratie: September 2000
  • Laatst online: 21-08 19:56

jopiek

Tja... 'ns ff denken.

Topicstarter
ok, dit is wat ik nu wil doen:

ik krijg een HTML pagina binnen... een aantal url's daarin zijn ../ i.p.v. de harde link en die wil ik door een harde link vervangen.

ik moet dus uit de memorystream die ik van het TIdHTTP component krijg op de een of andere manier tekst zien te halen, deze wijzigen en tenslotte m.b.v. de memorystream naar de TWebBrowser sturen...

als ik het zakie in een buffer stop, krijg ik een outofmemory error...

Cogito Ergo Credo


Verwijderd

Zoiets misschien?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
procedure DoDaThing(S: TMemoryStream);
var
  P: PChar;
  I: Integer;
const
  CReplaceWith = 'JoepiedePoepie';
begin
  P := StrPos(S.Memory, PChar('../'));
  while P <> nil do
  begin
    { Vergroot de size van de stream }
    S.Size := S.Size + Length(CReplaceWith) - 3;
    
    { Verplaats het zooitje na ../ in de stream op }
    Move(P^, (P + Length(CReplaceWith) - 3)^, S.Size - (P - S.Memory));
  
    { en zet CReplaceWith ertussen }
    Move(CReplaceWith, P^, Length(CReplaceWith));
    
    { en ga op zoek naar de volgende }
    P := StrPos(P, PChar('../'));
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  MemStream: TMemoryStream;
  StrStream: TStringStream;
begin
  MemStream := TMemoryStream.Create;
  StrStream := TStringStream.Create(Edit1.Text);
  try
    MemStream.LoadFromStream(StrStream);
    DoDaThing(MemStream);

    StrStream.Size := 0;
    StrStream.CopyFrom(MemStream, 0);
    Edit1.Text := StrStream.DataString;
  finally
    MemStream.Free;
    StrStream.Free;
  end;
end;