AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi bis zu einem bestimmten zeichen suchen?
Thema durchsuchen
Ansicht
Themen-Optionen

bis zu einem bestimmten zeichen suchen?

Ein Thema von shadow999 · begonnen am 15. Nov 2007 · letzter Beitrag vom 18. Nov 2007
Antwort Antwort
Seite 4 von 4   « Erste     234   
shadow999

Registriert seit: 15. Nov 2007
17 Beiträge
 
#31

Re: bis zu einem bestimmten zeichen suchen?

  Alt 15. Nov 2007, 20:15
Zitat:
ich würde so vorgehen:
Erst mal mit Pos('<img') die Position des img-Tags ermitteln, von da ab nach ">" suchen und an der Position von ">" einfach Insert(Zeile,Position,'/') machen.
geht meins denn auch so wie ich es gemacht habe?

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) = '<imgthen
        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..
  Mit Zitat antworten Zitat
mashutu

Registriert seit: 15. Nov 2007
195 Beiträge
 
#32

Re: bis zu einem bestimmten zeichen suchen?

  Alt 15. Nov 2007, 20:28
Zitat von shadow999:
Angenommen im Memo stehen folgende Buchstaben wie folgt:
A
B
C
DE
F
GH
I
J

Dann möchte ich bei "DE" anfangen zu suchen. Wenn er dann bis auf GH stößt, soll er aufhören.
Also da drum gehts eigentlich, das Suchen von einer bestimmten stelle im text bis zu einer bestimmten stelle.
[untested ON]
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.
utu

if it was hard to write it should be hard to read
  Mit Zitat antworten Zitat
marabu

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

Re: bis zu einem bestimmten zeichen suchen?

  Alt 15. Nov 2007, 20:30
Hallo Progman,

was machst du, wenn im HTML-Dokument ein solches Element auftaucht?

Code:
[img]assets/media.gif[/img]
Nachdenkliche Grüße

PS: Auch FindText() löst das Problem nicht viel besser als Pos()
Angehängte Dateien
Dateityp: pas mendedstr_148.pas (584 Bytes, 3x aufgerufen)
  Mit Zitat antworten Zitat
Progman

Registriert seit: 31. Aug 2007
Ort: 99974 MHL
695 Beiträge
 
Delphi 10.1 Berlin Starter
 
#34

Re: bis zu einem bestimmten zeichen suchen?

  Alt 15. Nov 2007, 20:33
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;
Karl-Heinz
Populanten von Domizilen mit fragiler, transparenter Aussenstruktur sollten sich von der Translation von gegen Deformierung resistenter Materie distanzieren!
(Wer im Glashaus sitzt sollte nicht mit Steinen werfen)
  Mit Zitat antworten Zitat
Tommy1988
(Gast)

n/a Beiträge
 
#35

Re: bis zu einem bestimmten zeichen suchen?

  Alt 18. Nov 2007, 00:12
-
Editiert
  Mit Zitat antworten Zitat
shadow999

Registriert seit: 15. Nov 2007
17 Beiträge
 
#36

Re: bis zu einem bestimmten zeichen suchen?

  Alt 18. Nov 2007, 02:05
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:
<body"X">"Y"
// text text und mehr text
</body>
mein schlechter code:
(<body wird gefunden, kein problem. der rest .. naja)
Delphi-Quellcode:
for x := CurPosition-4 downto 0 do
begin
StartTag := Copy(SynMemo1.Text, x, 5);
 if StartTag = '<bodythen
  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;
eigentlich dachte ich sollte es so gehen:
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.
  Mit Zitat antworten Zitat
shadow999

Registriert seit: 15. Nov 2007
17 Beiträge
 
#37

Re: bis zu einem bestimmten zeichen suchen?

  Alt 18. Nov 2007, 03:19
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;
  Mit Zitat antworten Zitat
shadow999

Registriert seit: 15. Nov 2007
17 Beiträge
 
#38

Re: bis zu einem bestimmten zeichen suchen?

  Alt 18. Nov 2007, 12:33
will mir keiner mehr helfen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 4 von 4   « Erste     234   


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 12:01 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