![]() |
Re: bis zu einem bestimmten zeichen suchen?
Zitat:
zu folgendem ergebnis bin ich gekommen:
Delphi-Quellcode:
var
i, x, StartPos, Ende: Integer; Text: String; begin Text := Memo1.Lines.Text; for i := 1 to Length(Text) do begin if (Text[i] = '<') then begin StartPos := i; TestMemo.Lines.Add('1. Schleife: "'+Copy(Text, i, 4)+'"'); // <img gefunden? if Copy(Text, i, 4) = '<img' then begin for x := StartPos to Length(Text) do if (Text[x] = '>') then begin TestMemo.Lines.Add('2. Schleife: "'+Copy(Text, x, 1)+'"'); end; end; end; end; end; wer es testen will braucht: 2 memos. tipps im memo1 folgendes ein: [img][/img] bei klick auf den button kommen 2 sachen ins TestMemo. einmal <img und das zweite ist > damit habe ich DAS schonmal geschafft.. von (schmetaisch) C bis E zu suchen.. |
Re: bis zu einem bestimmten zeichen suchen?
Zitat:
Delphi-Quellcode:
function foo(sl:TStringList;AStart,AStop:String):tStringList; //result is NIL if nothing found
var sTmp : string; i,j,k : integer; begin result:=TStringList.Create; //optimistic version i:=0; while i<sl.count do begin sTmp:=sl[i]; //analyze a line k:=pos(AStart,sTmp); //is there anything we are looking for? if k>0 then begin //start found j:=i; //keep this for next search i:=sl.count; //more elegant than exit result.add(copy(sTmp,k,length(sTmp)); //include this into the result end; inc(i); //next line end; //of while construct if result.count>0 then //did we find a start begin i:=j; while i<sl.count do begin sTmp:=sl[i]; k:=pos(AStop,sTmp); if k>0 then begin i:=sl.count; //exit this while construct result.add(copy(sTmp,1,k+length(AStop)-1); // end else result.add(sTmp); inc(i); end;//while end//AStart found else//otherwise we do not deliver any result FreeAndNil(result); end; Wenn Du nur ein Ergebnis haben willst, falls das Ende auch gefunden wurde muesstest Du noch zwei Zeilen einfuegen. Hab das ganze jetzt nur mal schnell so hingetippert, weil ich auf diesem Rechner kein Delphi habe. Es geht sicherlich eleganter/effizienter, aber das sollte auch einigermassen erlaeutern, was zu tun ist. |
Re: bis zu einem bestimmten zeichen suchen?
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Progman,
was machst du, wenn im HTML-Dokument ein solches Element auftaucht?
Code:
Nachdenkliche Grüße
[img]assets/media.gif[/img]
PS: Auch FindText() löst das Problem nicht viel besser als Pos() |
Re: bis zu einem bestimmten zeichen suchen?
dann nehm ich eben AnsiLowerCase und geb die Zeile dann als AnsiLowerCase(z) zurück, denn Tags sollen in Kleinschreibung sein ;)
Natürlich muss man in der Endversion noch Prüfungen einbauen, ob nicht /> schon korrekt da steht. Mein Beispiel sollte ja nur die etwaige Vorgehensweise zeigen. Hier korrigierter Source:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i, p: Integer; z: String; begin for i:= 0 to Memo1.Lines-1 do begin z:=LowerCase(Memo1.Lines[i]); //gleich in Kleinbuchstaben umwandeln :-) p:=Pos('<img',z); if p > 0 then begin inc(p,4); //'<img' übergehen while z[p] <> '>' do inc(p); //p bleibt auf Position von '>' stehen if z[p-1] <> '/' then Insert(' /',z,p); Memo1.Lines[i]:=z; end; end; end; |
Re: bis zu einem bestimmten zeichen suchen?
-
Editiert |
Re: bis zu einem bestimmten zeichen suchen?
Ich habe da immernoch ein kleines Problem..
Undzwar folgendes: Wenn der Cursor an der mit X markierten Stelle ist, funktioniert alles super.. ist der cursor aber irgentwo nach der mit Y markierten stelle gibts probleme.
Code:
mein schlechter code:
<body"X">"Y"
// text text und mehr text </body> (<body wird gefunden, kein problem. der rest .. naja)
Delphi-Quellcode:
eigentlich dachte ich sollte es so gehen:
for x := CurPosition-4 downto 0 do
begin StartTag := Copy(SynMemo1.Text, x, 5); if StartTag = '<body' then begin iEndTag := PosEx('>', SynMemo1.Text, CurPosition); if iEndTag <> 0 then begin GetCaretPos(Point); bodyPopUp.Popup(Point.X+125, Point.Y+50); exit; end; end; end; Ab der cursorposition soll "<body " gesucht werden (rückwärts). ist es gefunden, gehts weiter in die schleife. ich dachte ich suche mit PosEx bis ich ">" finde, ist es gefunden so wird ein popupmenu angezeigt. da ist das problem: hat man den cursor aber hinter dem ">", also danach irgentwo (*), so wird zwar "<body" gefunden (logisch) aber es wird nicht drauf geachtet, ob der cursor noch im "gültgen bereich" ist .. kann man da was machen? mir fällt jetzt nix ein was sinn machen würde. |
Re: bis zu einem bestimmten zeichen suchen?
ich hab es mal so probiert das eine abfrage stattfindet ob der cursor sich
zwischen p und p2 befindet mein code klappt aber niciht ganz
Delphi-Quellcode:
procedure TForm1.SynMemo1Change(Sender: TObject); begin CurPosition := SendMessage(SynMemo1.handle,EM_LineIndex,Ln,0); CurPosition := SynMemo1.SelStart-CurPosition; end; for i:= CurPosition downto 0 do begin z:=LowerCase(SynMemo1.Lines[i]); //gleich in Kleinbuchstaben umwandeln :-) p:=Pos('<img',z); if p > 0 then begin inc(p,4); //'<img' übergehen p2 := p; while z[p2] <> '>' do begin inc(p2); //p2 bleibt auf Position von '>' stehen end; if (CurPosition < p-2) and (CurPosition > p2-2) then begin // tue etwas Caption := 'Tue etwas'; // wird nicht angezeigt end; // SynMemo1.Lines[i]:=z; end; end; |
Re: bis zu einem bestimmten zeichen suchen?
will mir keiner mehr helfen :idea: :cry:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:25 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