Delphi-PRAXiS
Seite 4 von 5   « Erste     234 5      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Isalpha, IsNum, IsString als eine Funktion (https://www.delphipraxis.net/131956-isalpha-isnum-isstring-als-eine-funktion.html)

himitsu 8. Apr 2009 18:28

Re: Isalpha, IsNum, IsString als eine Funktion
 
Zitat:

//Variablen absichtlich global deklariert.
aber warum eigentlich? :shock:
(diese werden doch nur innerhalb der Funktion benötigt)

so liegen die jetzt im Heap(?) und müssen jedesmal dereferenziert werden ... Lokal würden die nur auf dem Stack landen und oftmals sogar nur in den Registern.



und vorallem das For + globales CheckStr_i geht bei dir so einfach?

Go2EITS 8. Apr 2009 18:46

Re: Isalpha, IsNum, IsString als eine Funktion
 
@himitsu
Nehme den Var Abschnitt in die Funktion Checkstr mit rein, also lokal. 1000000 mal die Variablen neu angelegen beim Aufruf der Funktion kostet Zeit. Probiere es mal aus. Ein "Minimal-Profiler" ist ja mit dabei.
Zitat:

und vorallem das For + globales CheckStr_i geht bei dir so einfach?
Ja. Sieht so aus. Ein globales i als For-Schleifenvariable würde ich nie nehmen, daher der Zusatz CheckStr_ beim CheckStr_i.

himitsu 8. Apr 2009 19:02

Re: Isalpha, IsNum, IsString als eine Funktion
 
der Stack ist doch schon reserviert ... es wird also kein extra Speicher reserviert/freigegeben, für die lokalen Variablen, vorallem da für deine Funktion eh ein Stackframe erstellt wird ... dürft doch also nichts ausmachen, ob da nun 10 oder 20 Byte reserviert werden (wird eh nur ein Integer/Register > der Stackpointer < geändert)

und bei mir meckert delphi eigentlich immer, vonwegen nur lokale Variablen for For :gruebel:

Go2EITS 8. Apr 2009 19:36

Re: Isalpha, IsNum, IsString als eine Funktion
 
Wie gesagt, nehme den globalen Var-Abschnitt und kopiere diesen lokal in CheckStr rein und führe dann das Programm aus. Es benötigt länger.
Meckern tut Delphi bei mir auch, das stört mich nicht weiter, solange compiliert wird.

blawen 8. Apr 2009 20:34

Re: Isalpha, IsNum, IsNumeric als eine Function
 
Zitat:

Zitat von himitsu
Delphi-Quellcode:
for i:=1 to Length(Str) do
   begin
      if str[i] in ['0'..'9'] then
        Include(Result, Ziffer);
      else if str[i] in ['a'..'z','A'..'Z'] then
        Include(Result, Zeichen);
      else
        Include(Result, Andere);

      if Result = [Ziffer, Zeichen, Andere] then
         break;
   end;

Auch wenn diese Bemerkung mit der aktuellen Lösung nichts mehr zu tun hat, erlaube ich mir eine Anmerkung loszuwerden...

Seit wann kommt vor ein "else" ein ";" ??? (Taucht in den genannten Versionen mehrfach auf...)

himitsu 8. Apr 2009 20:41

Re: Isalpha, IsNum, IsString als eine Funktion
 
das passiert mal schnell, wenn man Copy&Paste nutzt :oops:
( ";" müssen also noch weg)

sx2008 9. Apr 2009 08:45

Re: Isalpha, IsNum, IsString als eine Funktion
 
Man kann übrigens viel Zeit und Code sparen, indem man tabellengestützt feststellt zu welchen Typen ein Zeichen gehört.
Man hat dann ein Array von 256 Elementen
Delphi-Quellcode:
AnsiCharTypes: array [Char] of Word;
entweder als vordefiniertes Konstantenarray oder man initialisiert es einmal beim Programmstart.
Delphi-Quellcode:
function CharIsAlpha(const C: Char): Boolean;
begin
  Result := (AnsiCharTypes[C] and C1_ALPHA) <> 0;
end;
Wie das genau geht, kann man sich in der Unit JclAnsiStrings aus der Jedi Code Library anschauen.

Go2EITS 9. Apr 2009 09:26

Re: Isalpha, IsNum, IsString als eine Funktion
 
Interessante Idee. Das werd ich mal probieren. Danke.

hoika 9. Apr 2009 09:45

Re: Isalpha, IsNum, IsString als eine Funktion
 
Hallo,

netter Thread ...

Aber
< Meckern tut Delphi bei mir auch, das stört mich nicht weiter, solange compiliert wird. >

Genau deshalb würde ich deine Methode nicht benutzen (wenn ich sie brauche würde ;) ).
Wenn du mit offenen Augen Compiler Hinweise und -warnungen ignorierst,
kann das schnell ins Auge gehen.

<Protz> Mein Code hat weder Warnungen noch Hinweise </Protz>

Für den Test würde ich dann noch DUnit nehmen.


Heiko

Go2EITS 9. Apr 2009 10:44

Re: Isalpha, IsNum, IsString als eine Funktion
 
@hoika Darum auch ein eindeutige Namen, die man wohl nicht 2x verwendet: z. B. Checkstr_i
Es bleibt Dir überlassen, was Du machst. Hier wird niemand gezwungen. :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:00 Uhr.
Seite 4 von 5   « Erste     234 5      

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