![]() |
Alternative zu PosEx und Insert
Hallo...
Ich habe in delphi7 einen code geschreiben, der PosEx und Insert benutzt, jetzt muss ich dass auf D6 machen, und da funzt PosEx und Insert nicht. hat da jemand ne idee? So sah der Codeteil mit D7 aus:
Delphi-Quellcode:
_p2 := PosEx('"', _S, _p1+1);
if (_p2 = 0) then begin // Nicht gefunden Exit; end; Delete(_s, _p1, _p2-_p1); Insert( Edit1.Text, _s, _p1); memo1.Text := _s; |
Re: Alternative zu PosEx und Insert
du könntest dir die funktionen PosEx und Insert doch einfach aus deinem Delphi7 rüberkopieren.
|
Re: Alternative zu PosEx und Insert
ich habe D7 leider nicht hier :-(
Ausserdem weiß ich auch net genau welche Units das sind Wenn jemand D7 hat könnte er die Units eventuell posten? Kann ich dann eigentlich einfach die alten Units aus D6 ersetzen? denn D7 müsste doch alles können was D6 auch kann oder? |
Re: Alternative zu PosEx und Insert
mit posten von kompletten units sieht es schlecht aus, selbst das posten einzelner Funktionen fällt schon unter das Urheberreicht. Hast du schon versucht die Funktionen selbst zu schreiben?
|
Re: Alternative zu PosEx und Insert
Insert() dürfte kein Problem unter D6 sein - hier kommt
![]()
Delphi-Quellcode:
marabu
function PosEx(const SubStr, S: string; Offset: integer): integer;
begin Result := Pos(SubStr, Copy(S, OffSet, Succ(Length(S) - OffSet))); if Result > 0 then Result := Result + Pred(Offset); end; |
Re: Alternative zu PosEx und Insert
insert vermute ich auch das es das unter Delphi6 gibt, wenn nicht:
Delphi-Quellcode:
@marabu: Die PosEx funktion sieht genau so unperformant aus wie meine Insert-Procedure
procedure Insert(SubStr: String; var Dest: String; Index: Integer);
begin Dest := copy(Dest, 1, Index - 1) + SubStr + copy(Dest, Index, Length(Dest)); end; |
Re: Alternative zu PosEx und Insert
Danke für PosEx aber das Insert Problem hab ich noch
der code war folgendermaßen Insert('Text to Insert', _s, _p1); und in D7 ging alles und jetzt habe ich die Fehlermeldung, das ein operator oder Simikolon fehlt, das kann aber nicht sein (und tuts auch net) unter D7 lief es genau so. |
Re: Alternative zu PosEx und Insert
hier noch mal die Insertfunktion mit mehr performance, PosEx werd ich mir auch nochmal anschauen
Delphi-Quellcode:
[Edit]
procedure Insert(SubStr: String; var Dest: String; Index: Integer);
var LOldLen, LNewLen, LSubLen: Integer; begin LSubLen := Length(SubStr); LOldLen := Length(Dest); LNewLen := LSubLen + LOldLen; SetLength(Dest, LNewLen); move(Dest[Index], Dest[Index + LSubLen], LSubLen); move(SubStr[1], Dest[Index], LSubLen); end; und hier jetzt noch PosEx
Delphi-Quellcode:
ist fast genau so schnell wie die originale posex von Delphi7. Vorteil dieser Funktion ist, das sie nicht mit einer AV abbricht wenn man einen leeren Substring übergibt (bei der originalen von D7 ist dies leider der Fall).
function PosEx(const SubStr, S: string; Offset: Cardinal = 1): Integer;
var LSubStrlen, LCount1, LCount2: Integer; begin if Offset = 1 then result := Pos(SubStr, S) else begin LSubStrLen := Length(SubStr); if LSubStrLen > 0 then begin for LCount1 := Offset to Length(S) - LSubStrLen + 1 do begin LCount2 := 0; while (LCount2 < LSubStrLen) and (SubStr[LCount2 + 1] = S[LCount2 + LCount1]) do inc(LCount2); if (LCount2 = LSubStrLen) then begin result := LCount1; Exit; end; end; end; result := -1; end; end; |
Re: Alternative zu PosEx und Insert
ähhhm Code-Library -> Object-Pascal / Delphi-Language ->
![]() PS: ich hoffe mal marbaru hat nichts dagegen, dat ich mir mal seine PosEx-Version gemopst hab :roll: > ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:40 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