![]() |
ganz simpler aufruf aber compiler meldet fehler...
Ich will n memo nach nem string durchsuchen ganz normal...das hat auch alles funktioniert.
Aber als ich dann aus einem String was löschen wollte sagt er immer: Constant object cannot be passed as var Parameter
Delphi-Quellcode:
while i<=memo4.Lines.Count-1 do
begin if pos('http://lix.in/',memo4.Lines[i])>0 then begin q:= pos('http://lix.in/',memo4.Lines[i]); for p:= Pos('http://lix.in/', memo4.Lines.Strings[i]) to length(memo4.Lines.strings[i]) do if (Memo4.Lines.Strings[i][p] <> ' ') then begin s := s + Memo4.Lines.Strings[i][p]; end else begin break; delete(memo4.lines.strings[i],q,p); end; memo3.Lines.Add(s); s:=''; end; end; i:=i+1; end; Ich dreh durch...selbst wenn ich da delete('test',1,2) einsetze sagt er dass gleiche... Markiert aber diese Zeile als Fehlerquelle... Habe delphi 6 personal english Vielen Dank im Vorraus. |
Re: ganz simpler aufruf aber compiler meldet fehler...
Arbeite nicht direkt mit Memo4.Lines.Strings, sondern speichere diese in eine Variable, mit der du in deiner Prozedur arbeitest und die du danach wieder deinen Memo4.Lines.String zuweist. Ist außerdem schneller ;)
|
Re: ganz simpler aufruf aber compiler meldet fehler...
Guten Morgen.
Memo4.Lines.Strings[i] ist das gleiche wie Memo4.Lines[i]. In jedem Fall ist es eine property und kann nicht als Variable an die Prozedur Delete() übergeben werden - wie Julian dir schon geschrieben hat. Wenn du eine Position öfter verwendest, dann solltest du sie in einer Variablen zwischenspeichern und sie nicht ständig neu suchen lassen. Und wenn du deinen Code funktional gliederst, hast du mehr Spaß am Programmieren:
Delphi-Quellcode:
Verwenden kannst du diese Prozedur in deinem Fall so:
procedure ExtractUrls(s, urls: TStrings; prefix: String);
var i, iStart, iStop: Integer; line: String; begin for i := 0 to Pred(s.Count) do begin line := s[i]; iStart := Pos(prefix, line); if iStart > 0 then begin iStop := PosEx(' ', line, iStart + Length(prefix)); if iStop = 0 then urls.Add(Copy(line, iStart, MaxInt)) else urls.Add(Copy(line, iStart, iStop - iStart)); end; end; end;
Delphi-Quellcode:
Grüße vom marabu
begin
ExtractUrls(Memo4.Lines, Memo3.Lines, 'http://lix.in/'); end; |
Re: ganz simpler aufruf aber compiler meldet fehler...
Danke euch...
Habs jetzt so gemacht wie marabu es gesagt hat... Hattte kein PoseX (Delphi6 PE) aber habs nachgebaut mit
Delphi-Quellcode:
Jedoch findet er trotzdem nur einen link wenn sie in einer zeile stehen...
function PosEx(const Substr: string; const S: string; Offset: Integer): Integer;
begin if Offset <= 0 then Result := 0 else Result := Pos(Substr, Copy(S, Offset, Length(S))); if Result <> 0 then Result := Result + Offset - 1; end; Wenn wir das noch gelöst kriegen...Bettel.... |
Re: ganz simpler aufruf aber compiler meldet fehler...
An mehrere Links pro Zeile hatte ich bei meinem Code garnicht gedacht, aber mit PosEx() und zwei zusätzlichen Zeilen sollte es funktionieren:
Delphi-Quellcode:
Freundliche Grüße
procedure ExtractUrls(s, urls: TStrings; prefix: String);
var i, iStart, iStop: Integer; line: String; begin for i := 0 to Pred(s.Count) do begin line := s[i]; iStop := 0; repeat iStart := PosEx(prefix, line, Succ(iStop)); if iStart > 0 then begin iStop := PosEx(' ', line, iStart + Length(prefix)); if iStop = 0 then urls.Add(Copy(line, iStart, MaxInt)) else urls.Add(Copy(line, iStart, iStop - iStart)); end; until iStart = 0; end; end; |
Re: ganz simpler aufruf aber compiler meldet fehler...
Und ich hatte an repeat until nicht gedacht...
Vielen vielen dank! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:02 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 by Thomas Breitkreuz