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.