AGB  ·  Datenschutz  ·  Impressum  







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

Text in Memo finden

Ein Thema von Tommy1988 · begonnen am 9. Mai 2007 · letzter Beitrag vom 11. Mai 2007
Antwort Antwort
Seite 2 von 2     12   
Tommy1988
(Gast)

n/a Beiträge
 
#11

Re: Text in Memo finden

  Alt 10. Mai 2007, 17:07
Halöle, danke an euch ALLE. hat gut geklappt.

Habe mich auch länger jetzt mit Strings ersetzen beschäftigt, nur leider finde ich für mein Problem keine Lösung.

Delphi-Quellcode:
var Text: String;
begin
  Text := Memo1.Text;
  Text := StringReplace(text, '<head>', '<head>'+Edit1.Text+ []);
end;
Ich möchte gerne im Memo das Tag <head> aufsuchen, und AB <head> den inhalt von ein Paar Editfeldern hinzufügen.

So wie ich es probiert habe, siehe Code, klappt es nicht.

Ihr werdet sicher über den Code lachen, aber anders weis ich nicht wie das gehen soll.
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#12

Re: Text in Memo finden

  Alt 10. Mai 2007, 17:17
Ein Blick in die Delphihilfe hätte das Problem wahrscheinlich gelöst.
StringReplace(text, '<head>', '<head>' + Edit1.Text, [rfReplaceAll, rfIgnoreCase]);
Blackheart
  Mit Zitat antworten Zitat
Benutzerbild von joachimd
joachimd

Registriert seit: 17. Feb 2005
Ort: Weitingen
679 Beiträge
 
Delphi 12 Athens
 
#13

Re: Text in Memo finden

  Alt 10. Mai 2007, 17:28
Zitat von Blackheart:
Ein Blick in die Delphihilfe hätte das Problem wahrscheinlich gelöst.
StringReplace(text, '<head>', '<head>' + Edit1.Text, [rfReplaceAll, rfIgnoreCase]);
reicht nicht!
@Tommy:
Such Dir die Positionen von <HEAD> und </HEAD> und bastel Dir einen String über Copy zusammen:

Delphi-Quellcode:
function ReplaceBetween(Tag1, Tag2, Text, NewText: String): String;
var
  iTag1, iTag2: integer;
begin
  iTag1:=Pos(Tag1,Text)+length(Tag1);
  iTag2:=Pos(Tag2,Text);
  Result:=Copy(Text,1,iTag1)+NewText+Copy(Text,iTag2+1,Length(Text));
end;
Joachim Dürr
Joachim Dürr Softwareengineering
http://www.jd-engineering.de
  Mit Zitat antworten Zitat
Tommy1988
(Gast)

n/a Beiträge
 
#14

Re: Text in Memo finden

  Alt 10. Mai 2007, 19:23
Erm, und der Aufruf sieht dann wie folgt aus:

ReplaceBetween('<head>','<head>',Memo1.Text); Falsch oder ?
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#15

Re: Text in Memo finden

  Alt 10. Mai 2007, 20:01
Hallo Tommy,

du musst das Ergebnis der Funktion auch seiner Verwendung zuführen:

 Memo1.Text := ReplaceBetween('<head>', '</head>', Memo1.Text); Es gibt aber auch noch einen zuverlässigeren Weg:

Delphi-Quellcode:
procedure TDemoForm.ButtonClick(Sender: TObject);
var
  doc: IDispatch;
  ec: IHTMLElementCollection;
  title: IHTMLTitleElement;
begin
  doc := GetDocument(Memo.Text);
  // oder direkt aus dem Internet mit
  // doc := GetDocument(HTTP.Get('http://localhost'));
  with doc as IHTMLDocument3 do
  begin
    ec := getElementsByTagName('title');
    if ec.length > 0 then
    begin
      title := ec.item(0, null) as IHTMLTitleElement;
      title.text := 'potzblitz';
    end;
    Memo.Lines.Text := documentElement.outerHTML;
  end;
end;
Natürlich brauchst du noch die Funktion GetDocument:

Delphi-Quellcode:
function GetDocument(const markup: WideString): IDispatch;
var
  doc: OleVariant;
begin
  Result := CoHtmlDocument.Create;
  doc := Result;
  doc.Open;
  doc.Write(markup);
  doc.Close;
end;
Dabei darfst du nicht vergessen die Units ActiveX und Mshtml einzubinden.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Tommy1988
(Gast)

n/a Beiträge
 
#16

Re: Text in Memo finden

  Alt 11. Mai 2007, 17:27
Langsam verstehe ich hier nicht mehr..


Ich bleibe lieber bei Methode 1 (ReplaceBetween), auch wenn ich nicht weis, wie ich es richtig anwende.

Meine BDS ist eine PE deswegen kein MShtml.

Edit:
Delphi-Quellcode:
Memo1.Text := ReplaceBetween
('<head>', '<head>', Memo1.Text);
[Fehler] MetaTag.pas(47): E2035 Nicht genügend wirkliche Parameter
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#17

Re: Text in Memo finden

  Alt 11. Mai 2007, 17:39
Hallo Tommy,

wie du ReplaceBetween() richtig anwendest, habe ich dir gleich am Anfang meines Beitrages beschrieben. Den Rest kannst du getrost ignorieren. Er ist vielleicht für Mitleser von Nutzen, die erkennen, dass die Ersetzungsmethode bei auskommentierten HTML-Codes scheitern kann.

Freundliche Grüße

Edit: Es muss noch der Ersetzungstext als viertes Argument übergeben werden.

Edit2: Im Code von Joachim ist noch ein kleiner Fehler - hier die Korrektur:

Delphi-Quellcode:
function ReplaceBetween(Tag1, Tag2, Text, NewText: string): string;
var
  iTag1, iTag2: Integer;
begin
  iTag1 := Pos(Tag1, Text) + Length(Tag1);
  iTag2 := Pos(Tag2, Text);
  Result := Copy(Text, 1, iTag1 - 1) + NewText + Copy(Text, iTag2, Length(Text));
end;
Aber immer dran denken: Diese Methode funktioniert nur wenn "sauberes" HTML vorliegt und nur das erste Auftreten der Tag-Kombination bearbeitet werden soll.
  Mit Zitat antworten Zitat
Tommy1988
(Gast)

n/a Beiträge
 
#18

Re: Text in Memo finden

  Alt 11. Mai 2007, 19:25
Ich scheitere leider.
Die Syntax stimmt bei mit nicht.

Zitat:
Edit: Es muss noch der Ersetzungstext als viertes Argument übergeben werden.
Wie füge ich denn 2 Editfelder als 4. Argument ein?
  Mit Zitat antworten Zitat
Blackheart

Registriert seit: 4. Mai 2005
846 Beiträge
 
Delphi 7 Enterprise
 
#19

Re: Text in Memo finden

  Alt 11. Mai 2007, 19:35
Du solltest Dir vieleicht noch mal den Crashkurs anschauen.
Memo1.Text:=ReplaceBetween('<head>','</head>',Memo1.Text,Edit1.Text);
Blackheart
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 10:22 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