Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Lowercase Funktion? (https://www.delphipraxis.net/48333-lowercase-funktion.html)

Pseudemys Nelsoni 23. Jun 2005 19:06


Lowercase Funktion?
 
Hallo,

ich möchte eine Lowercase Funktion schreiben, die ich ohne die VCL verwenden kann.

Bis jetzt habe ich es so:

Delphi-Quellcode:
function StrLower(Str: PChar): PChar;
var
  pIdx: PChar;
begin
  GetMem(Result, SizeOf(Str));
  pIdx := @Str[1];
  while (pIdx^ <> #0) do
  begin
    if pIdx^ in ['A'..'Z'] then
      pIdx^ := Chr(Ord(pIdx^)+32);
    Inc(pIdx);
  end;
end;

Nur ist das richtig? Ich meine, müsste ausserhalb der Funktion nicht dann auch noch FreeMem() aufgerufen werden?

MathiasSimmack 23. Jun 2005 19:07

Re: Lowercase Funktion?
 
Wäre eine gute Idee, ;), und vergiss die deutschen Umlaute nicht.

Pseudemys Nelsoni 23. Jun 2005 19:09

Re: Lowercase Funktion?
 
Moin Mathias,

könnte man das auch noch anders lösen? *g*

So das ich die Funktion normal verwenden kann, ohne das ich da in meinem Hauptprogramm noch was löschen muss?
Ich meine wenn man Funktionen aus der Windows.pas, wie lstrcmpi() etc aufruft, muss man ja nachher auch nichts freigeben ;)


@Edit: @Umlaute: Stimmt, fast vergessen *g*...Gibt es sonst noch irgendwelche Zeichen die man beachten sollte?

SirThornberry 23. Jun 2005 19:11

Re: Lowercase Funktion?
 
in der unit windows gibts dafür "CharLowerBuff" Diese wird auch von AnsiLowerCase verwendet.
Da du die Enterprise hast solltest du ja auch den source haben..

Luckie 23. Jun 2005 19:11

Re: Lowercase Funktion?
 
Delphi-Quellcode:
function LowerCase(const S: string): string;
var
  Ch: Char;
  L: Integer;
  Source, Dest: PChar;
begin
  L := Length(S);
  SetLength(Result, L);
  Source := Pointer(S);
  Dest := Pointer(Result);
  while L <> 0 do
  begin
    Ch := Source^;
    if (Ch >= 'A') and (Ch <= 'Z') then Inc(Ch, 32);
    Dest^ := Ch;
    Inc(Source);
    Inc(Dest);
    Dec(L);
  end;
end;

MathiasSimmack 23. Jun 2005 19:13

Re: Lowercase Funktion?
 
Ich habe mal in meine Unit geguckt. Da steht:
Delphi-Quellcode:
function LowerCase(const s: string): string;
var
  i : integer;
begin
  Result := '';

  if(length(s) > 0) then
  begin
    SetLength(Result,length(s));
    for i := 1 to length(s) do
      case s[i] of
        'A'..'Z','Ä','Ö','Ü':
          Result[i] := CHR(BYTE(s[i]) + 32);
        else
          Result[i] := s[i];
      end;
  end;
end;
Das geht sicher auch noch besser. :stupid:

SirThornberry 23. Jun 2005 19:17

Re: Lowercase Funktion?
 
wie ich schon geschrieben hab gehts auch einfacher, einfach mal den Quelltext von "AnsiLowerCase" anschauen
Delphi-Quellcode:
function LowerCase(AStr: String): String;
begin
  SetString(result, PChar(AStr), Length(AStr));
  CharLowerBuff(PChar(result), Length(result));
end;

Pseudemys Nelsoni 23. Jun 2005 19:46

Re: Lowercase Funktion?
 
Moin,

danke für eure Tipps.

@SirThornberr, müsste das:

Delphi-Quellcode:
CharLowerBuff(PChar(result), Length(result));
nicht:

Delphi-Quellcode:
CharLowerBuff(PChar(result), Length(result)+1);
heissen? also für das #0zeichen?

SirThornberry 23. Jun 2005 19:48

Re: Lowercase Funktion?
 
nen muss es nicht, schließlich soll das #0 nicht mit ins lowercase einfließen

Luckie 23. Jun 2005 20:42

Re: Lowercase Funktion?
 
In welcher Uni ist denn CharLowerBuffer() drinn? :gruebel:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:51 Uhr.
Seite 1 von 2  1 2      

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