Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Functions-Problem (https://www.delphipraxis.net/112259-functions-problem.html)

Tommy1988 17. Apr 2008 17:33


Functions-Problem
 
Also, ich habe mir folgende Function gebaut:

Delphi-Quellcode:
function GVersion(s: String): String;
begin
  while Pos('.', x) > 0 do
    x[Pos('.', s)] := ' ';
  while Pos(' ', x) > 0 do
    Delete(x, Pos(' ', x), 1);
    result := x;
end;
Damit mache ich aus z.B. 1.0.0.0 dann 1000.
So..

Insgesamt führe ich das zwei mal mit zwei verschiedenen Exe-Files aus.

Delphi-Quellcode:
sAppVersion := GVersion(sAppVersion);
sAktVersion := GVersion(sAktVersion);
Das klappt aber nicht, beide Strings bleiben leer.

Ich habe zwar schon eine Lösung gefunden, aber mich würde mal interessieren, warum das so ist?

Die Muhkuh 17. Apr 2008 17:37

Re: Functions-Problem
 
Hi,

zuerst einmal verwendest Du eine Variable namens x, die nirgendwo deklariert ist. Zum Zweiten ist Dein Code sehr unperformant. Da kann man deutlich besser machen:

Delphi-Quellcode:
function GVersion(s: String): String;
var
  I: Integer;
begin
  I := Pos('.', s);
  while I > 0 do
  begin
    Delete(s, I, 1);
    I := Pos('.', s);
  end;

  result := s;
end;

dominikkv 17. Apr 2008 17:41

Re: Functions-Problem
 
Delphi-Quellcode:
function GVersion(s: String): String;
begin
  result := StringReplace(s, '.', '', [rfReplaceAll]);
end;

DeddyH 17. Apr 2008 17:45

Re: Functions-Problem
 
Delphi-Quellcode:
function GVersion(const s: String): String;
begin
  result := StringReplace(s, '.', '', [rfReplaceAll]);
end;

Christian Seehase 17. Apr 2008 18:49

Re: Functions-Problem
 
Moin Zusammen,

dann will ich auch mal ;-)

Delphi-Quellcode:
function RemoveChar(const AsValue : string;const AcToRemove : Char) : string;

var
  iFrom : integer;
  iTo  : Integer;

begin
  SetLength(Result,Length(AsValue));
  iTo := 0;
  for iFrom := 1 to Length(AsValue) do begin
    if AsValue[iFrom] <> AcToRemove then begin
      Inc(iTo);
      Result[iTo] := AsValue[iFrom];
    end;
  end;
  SetLength(Result,iTo);
end;

oldmax 18. Apr 2008 05:48

Re: Functions-Problem
 
Hi
Eure Programmhilfen in Ehren, aber die Frage lautet: Was mache ich falsch und da ist der Hinweis auf die nicht deklarierte Variabe x die einzig richtige Antwort. Das es besser geht, keine Frage, aber es muß doch eigentlich auf den Fehler hingewiesen werden...
Sorry, wenns ein bißchen blöd und altklug klingt, das ist nicht meine Absicht, aber es ist noch sehr früh und ich bin in Zeitdruck...
So ist die Function richtig..

Delphi-Quellcode:
function GVersion(s: String): String;
Var x     : String; // x deklarieren
begin
  x:=s; // x initialisieren
  while Pos('.', x) > 0 do
    x[Pos('.', s)] := ' ';
  while Pos(' ', x) > 0 do
    Delete(x, Pos(' ', x), 1);
    result := x;
end;
An der Formatierung ist eigentlich nicht wirklich was auszusetzen, allerdings ist der Umweg über das Leerzeichen nicht notwendig.
Gruß oldmax

RavenIV 18. Apr 2008 07:46

Re: Functions-Problem
 
Warum soll den ums Verrecken ein unperformanter Code verbessert werden, wenn es eine fertige Delphi-Funktion dafür gibt?

oldmax 18. Apr 2008 08:08

Re: Functions-Problem
 
Hi
Zitat:

Ich habe zwar schon eine Lösung gefunden, aber mich würde mal interessieren, warum das so ist?
deswegen.....
Gruß oldmax

Tommy1988 21. Apr 2008 12:00

Re: Functions-Problem
 
Zitat:

zuerst einmal verwendest Du eine Variable namens x, die nirgendwo deklariert ist
Das muss ich entschuldigen, ich hatte s durch x getauscht, aber es hat es schon vorher nicht getahn, als x noch s war ;)

Aber ich werde mir mal eure Funktionen ansehen und draus lernen.

Vom StringReplace möchte ich eigentlich weg bleiben.

Ich probiers mal aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:31 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