AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Alternative zu PosEx und Insert

Ein Thema von kingflo · begonnen am 26. Okt 2005 · letzter Beitrag vom 16. Mär 2006
Antwort Antwort
kingflo

Registriert seit: 21. Jun 2004
Ort: Hamburg
502 Beiträge
 
Delphi 7 Professional
 
#1

Alternative zu PosEx und Insert

  Alt 26. Okt 2005, 17:49
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;
Florian Gilde
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Alternative zu PosEx und Insert

  Alt 26. Okt 2005, 17:50
du könntest dir die funktionen PosEx und Insert doch einfach aus deinem Delphi7 rüberkopieren.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
kingflo

Registriert seit: 21. Jun 2004
Ort: Hamburg
502 Beiträge
 
Delphi 7 Professional
 
#3

Re: Alternative zu PosEx und Insert

  Alt 26. Okt 2005, 18:00
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?
Florian Gilde
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Alternative zu PosEx und Insert

  Alt 26. Okt 2005, 18:03
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?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
marabu

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

Re: Alternative zu PosEx und Insert

  Alt 26. Okt 2005, 18:03
Insert() dürfte kein Problem unter D6 sein - hier kommt PosEx():

Delphi-Quellcode:
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;
marabu
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Alternative zu PosEx und Insert

  Alt 26. Okt 2005, 18:11
insert vermute ich auch das es das unter Delphi6 gibt, wenn nicht:
Delphi-Quellcode:
procedure Insert(SubStr: String; var Dest: String; Index: Integer);
begin
  Dest := copy(Dest, 1, Index - 1) + SubStr + copy(Dest, Index, Length(Dest));
end;
@marabu: Die PosEx funktion sieht genau so unperformant aus wie meine Insert-Procedure
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
kingflo

Registriert seit: 21. Jun 2004
Ort: Hamburg
502 Beiträge
 
Delphi 7 Professional
 
#7

Re: Alternative zu PosEx und Insert

  Alt 26. Okt 2005, 18:11
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.
Florian Gilde
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Alternative zu PosEx und Insert

  Alt 26. Okt 2005, 18:17
hier noch mal die Insertfunktion mit mehr performance, PosEx werd ich mir auch nochmal anschauen
Delphi-Quellcode:
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;
[Edit]
und hier jetzt noch PosEx
Delphi-Quellcode:
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;
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).
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#9

Re: Alternative zu PosEx und Insert

  Alt 16. Mär 2006, 16:49
ähhhm Code-Library -> Object-Pascal / Delphi-Language -> (Teil)String in anderem String suchen/zählen


PS: ich hoffe mal marbaru hat nichts dagegen, dat ich mir mal seine PosEx-Version gemopst hab
> http://www.delphipraxis.net/internal...hlight=#517629
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:36 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