Delphi-PRAXiS
Seite 7 von 8   « Erste     567 8      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   [Optimiert] Explode Prozedur - Reloaded (Ersatz für CodeLib) (https://www.delphipraxis.net/82268-%5Boptimiert%5D-explode-prozedur-reloaded-ersatz-fuer-codelib.html)

moonwhaler 14. Apr 2008 13:16

Re: [Optimiert] Explode Prozedur - Reloaded (Ersatz für Code
 
Erstmal ein dickes Dankeschön! Dieses Teil ist absolut genial! Eine Frage / Bitte habe ich aber noch: Ich muss häufig mit Unicode-Strings (WideString) arbeiten, leider funktioniert die aktuelle Version aber damit nicht. Das mag natürlich auch daran liegen, dass man die Ansi-String Version von TStringList verwendet (ich selbst hab mein komplettes Programm mittlerweile auf WideString und TTntStringList umgebaut).

Ein erster Versuch den Code in Richtung WideString zu portieren hat zwar (augenscheinlich) geklappt, jedoch ist er mit bösen Exceptions rausgeflogen (PWideChar, statt PChar usw.). Ist es möglich mir bei einer solchen Implementierung zu helfen, oder gibt es gar bereits eine solche?

Vielen Dank!
Christian

SubData 9. Sep 2008 13:44

Re: [Optimiert] Explode Prozedur - Reloaded (Ersatz für Code
 
Wenn der Divider mit einem leeren String aufgerufen wird, gibt es eine Zugriffsverletzung.

himitsu 1. Dez 2009 16:41

Re: [Optimiert] Explode Prozedur - Reloaded (Ersatz für Code
 
Liste der Anhänge anzeigen (Anzahl: 1)
hab mal ein paar Probleme bezüglich Unicode versucht zu beheben
ist allerdings noch nicht getestet
(und 'nen Codeformatter ist mal drübergerauscht ... dort drinnen mischten sich vorher mehrer Styles)

Grund: http://www.delphipraxis.net/internal...106505#1106505

als Quelle wurde die Unit aus Beitrag #1 genommen

Zitat:

Zitat von himitsu
PChar nach Länge für Copy wurde nicht halbiert ... siehe deine Ergebnisse
Länge für CompareMem wurde nicht verdoppelt, welches in falschen Vergleichen enden könnte.


Z4ppy 15. Aug 2010 12:44

AW: [Optimiert] Explode Prozedur - Reloaded (Ersatz für CodeLib)
 
Delphi 7 meldet mir:
Zitat:

[Warning] csExplode.pas(397): Return value of function 'TMultiCharPatternStringDivideIterator.MoveNext' might be undefined
MfG Z4ppy

alzaimar 16. Aug 2010 07:53

AW: [Optimiert] Explode Prozedur - Reloaded (Ersatz für CodeLib)
 
Ja. Und? Woran könnte das liegen?

Z4ppy 16. Aug 2010 15:44

AW: [Optimiert] Explode Prozedur - Reloaded (Ersatz für CodeLib)
 
Vielleicht daran, dass der Rückgabewert nicht sofort initialisiert wird sondern erst im if :stupid:
Aber da ich nicht weiss, was diese Funktion macht (ich habs aber auch nicht versucht herauszufinden), habe ich da nicht daran rumgefummelt...

MfG Z4ppy

DeddyH 16. Aug 2010 16:01

AW: [Optimiert] Explode Prozedur - Reloaded (Ersatz für CodeLib)
 
Ich habe die Funktion jetzt nicht in ihrer ganzen Logik erfasst, aber man müsste sie so umschreiben können:
Zitat:

Delphi-Quellcode:
      If fEndOfText Then
        Result := False
      Else
        begin
          ...
        end;

wird zu:
Delphi-Quellcode:
Result := False;
      If not fEndOfText Then
        begin
          ...
        end;

Christian Seehase 16. Aug 2010 20:23

AW: [Optimiert] Explode Prozedur - Reloaded (Ersatz für CodeLib)
 
Moin Detlef,

IMHO sollte man Result erst möglichst spät verwenden, da man ansonsten das (E)AX-Register früh blockiert. Also Folge wäre der resultierende Code dann nicht so gut optimierbar.
Je nach Anwendungsfall kann sich das auf die Performance auswirken.

himitsu 16. Aug 2010 20:54

AW: [Optimiert] Explode Prozedur - Reloaded (Ersatz für CodeLib)
 
Delphi lagert Result (falls es wirklich in EAX oder EAX+EDX zurückgegeben wird) notfalls auf ein anderes Register oder den Stack aus ... blockiert wird also nichts. :-D

[ot] aber schön dich mal wieder aktiver zu sehn :)

Z4ppy 16. Aug 2010 21:05

AW: [Optimiert] Explode Prozedur - Reloaded (Ersatz für CodeLib)
 
DeddyH:
Vielleicht aber auch:
Delphi-Quellcode:
      If fEndOfText Then
        Result := False
      Else
        begin
Result:=True;
          ...
        end;
Auf Zeile 332 ist übrigens eine Funktion einer anderen Kompo mit gleichem Namen so geschrieben.

MfG Z4ppy


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:15 Uhr.
Seite 7 von 8   « Erste     567 8      

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