Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Spezielle Memo Text suche? (https://www.delphipraxis.net/173722-spezielle-memo-text-suche.html)

gee21 12. Mär 2013 17:42

Spezielle Memo Text suche?
 
Hallo.

Ich würde gerne einen Text durchsuchen. (Ja ich weiss es gibt sehr viele Infos betreffend Text suchen)
Doch das was ich gerne machen würde, habe ich bis jetzt nicht gefunden

Ich habe einen Text in einem Memo (ca 200 Zeilen)

eine kleiner Teils des Textes sieht zB so aus:


<link rel="image_src" href="http://www./fileadmin/_t3t/css/apple-touch-icon.png" />
<title>27 Dresses, Regie: Anne Fletcher, USA, 2007</title>
<meta name="keywords" content="Film, Filmsuche, Filmdatenbank, Filmbeschreibung,

Jetzt möchte ich gerne, das im Memo nach 27 Dresses gesucht wird und dann der Fett markierte Text (27 Dresses Regie: Anne Fletcher, USA, 2007)
markiert wird und in einem String ausgegeben wird.

Ich glaube ich müsste folgendermassen vorgehen:
1. Text suchen
2. definieren von < bis >
3. String ausgeben


Nur kann mir aber jemand sagen wie man so etwas umsetzt? evt mit selstart und sellength?

Furtbichler 12. Mär 2013 17:50

AW: Spezielle Memo Text suche?
 
Mit einem Memo zeigt man Dinge an, aber man verarbeitet sie nicht. Hierfür kannst Du die Eingeschaft 'Memo.Lines.Text' verwenden, sie liefert den Inhalt als String.
Delphi-Quellcode:
function FindeDenText (Const Suchtext, gesamterText : String) :String;
Var
  p,q : Integer;

begin
  result := '';
  p := Pos(Suchtext, gesamterText);
  if p=0 then exit; // nix gefunden
  q:=p+Length(Suchtext);
  while (p>0) and (gesamterText[p]<>'>') do dec(p);
  while (q<length(gesamterText)) and (gesamterText[q]<>'<') do inc(q);

  result := Copy(gesamterText,p+1,q-p-1);
end;
...
// Aufruf so
MeinText := FindeDenText('27 Dresses', MyMemo.Lines.Text);
ungetestet allerdings.

DeddyH 12. Mär 2013 18:01

AW: Spezielle Memo Text suche?
 
Oder man verwendet statt des Memos ein TRichedit und arbeitet mit FindText.

gee21 12. Mär 2013 18:02

AW: Spezielle Memo Text suche?
 
Wow Hammer.

Danke dir vielmals.

Furtbichler 12. Mär 2013 18:43

AW: Spezielle Memo Text suche?
 
Zitat:

Zitat von DeddyH (Beitrag 1207144)
Oder man verwendet statt des Memos ein TRichedit und arbeitet mit FindText.

Aber dann muss man doch trotzdem zum bis zum '>' und '<' erweitern..

Ach, RegEx fällt mir auch noch ein.

Sir Rufo 12. Mär 2013 20:03

AW: Spezielle Memo Text suche?
 
Da es sich anscheinend um eine HTML-Datei handelt kann man die auch vernünftig parsen und sich nur diese speziellen Text heraussuchen lassen.

MSDN-Library durchsuchenIHtmlDocument2

Beispiele dazu lassen sich hier und über google finden

gee21 14. Mär 2013 17:36

AW: Spezielle Memo Text suche?
 
Ich dachte mir ich mache nun kein neuer Eintrag auf da dieser noch so neu ist und es wieder um eine Text suche geht.

Ich habe einen Text. ATEXTBTEXTCTEXT

Die 3 Texte sind eben nicht getrennt durch ein Sonderzeichen. Aber ich kenne Text A und C
Nun dachte ich, ich könnte das so lösen um so zumindest mal den ATEXT zu entfernen und ich dachte, ich erhalte dann: BTEXTCTEXT

function Split (AString : String) : String;
var iPos : Integer;
begin
iPos := Pos ('AText', AString);
if (iPos > 0) then
Result := Copy (AString, iPos + 1, Length (AString))
else
Result := 'Nee du Pfeife';
end;



Aufrufen wollte ich es dann so:

memo1.Text:= Split(memo1quell.text);

Aber da werde ich dann nur zur Pfeife deklariert :-D

Volker Z. 14. Mär 2013 18:07

AW: Spezielle Memo Text suche?
 
Hallo gee21,

Delphi-Quellcode:
Pos (SubStr, Str)
ist case sensitive. Also
Delphi-Quellcode:
Pos ('AText', AString) <> Pos ('ATEXT', AString)
.

Grüße

Bummi 14. Mär 2013 22:39

AW: Spezielle Memo Text suche?
 
vielleicht kannst Du mit dem Ansatz etwas anfangen:
Delphi-Quellcode:
const
 ALL= 'ATEXTBTEXTCTEXT';
 A='atext';
 c='Ctext';
begin
   Showmessage(StringReplace(
               StringReplace(ALL,a,'',[rfReplaceAll,rfIgnoreCase])
               ,c,'',[rfReplaceAll,rfIgnoreCase])
               );
end;

Volker Z. 14. Mär 2013 22:57

AW: Spezielle Memo Text suche?
 
Hallo gee21,

vielleicht hilft Dir folgendes weiter:
Delphi-Quellcode:
function Split (const Find, Str : string; var Head, Tail : string) : Integer;
begin
  Result := Pos (LowerCase (Find), LowerCase (Str));
  if Result = 0 then
    Exit;

  Head := Copy (Str, 1, Result - 1);
  Tail := Copy (Str, Result + Length (Find), Length (Str))
end;
Delphi-Quellcode:
Split ('bTeXt', 'ATEXTBTEXTCTEXT', s, t);
ShowMessage (s + ' ' + t);
gibt Dir folgendes aus: ATEXT CTEXT

Gruß


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