Autor Beitrag
Tranx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 648
Erhaltene Danke: 85

WIN 2000, WIN XP
D5 Prof
BeitragVerfasst: Sa 13.04.13 17:11 
Ich habe bei folgendem Konstrukt Probleme:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
interface

function Gleich(psText1, psText2: string; pbTrimmed: Boolean = TRUE; pbUpperCase: boolean = TRUE): boolean; overload;
function Gleich(psText1 : string; pasText2 : Array of String; pbTrimmed: Boolean = TRUE; pbUpperCase: boolean = TRUE): boolean; overload;

implementation

function Gleich(psText1, psText2: string; pbTrimmed: Boolean = TRUE; pbUpperCase: boolean = TRUE): boolean;
begin
  if pbTrimmed then
    if pbUpperCase then
      Result := (Uppercase(Trim(psText1)) = Uppercase(Trim(psText2)))
    else
      Result := (Trim(psText1) = Trim(psText2))
  else if pbUpperCase then
    Result := (Uppercase(psText1) = Uppercase(psText2))
  else
    Result := (psText1 = psText2);
end;

function Gleich(psText1 : string; pasText2 : Array of String; pbTrimmed: Boolean = TRUE; pbUpperCase: boolean = TRUE): boolean;
var
  i : integer;
  lbResult : boolean;
begin
  lbResult := FALSE;
    For i := 0 to High(pasText2) do
  begin
    lbResult := lbResult or Gleich(psText1, pasText2[i], pbTrimmed, pbUppercase);
  end;
  Result := lbResult;
end;

end.


Es wird beim Aufruf von
ausblenden Delphi-Quelltext
1:
   Erg := Gleich(Endung, ['PAS','PPT','DOC','XLS']);					


in meinem Programm ein undefiniert langer Array of String mit irgendwelchen ominösen Inhalten erzeugt und High(pasText2) liegt zumeist in der Größenordnung von 600000 und mehr. Was logischerweise zu Laufzeitfehlern führt.

Wenn ich jedoch die folgende Variante (s.u.) wähle (ohne Variantenparametern pbTrimmed und pbUppercase) dann gibt pasText2 den richtigen Array aus.

Der Aufruf lautet dann
ausblenden Delphi-Quelltext
1:
   Erg := Gleich(Endung, ['PAS','PPT','DOC','XLS'], FALSE, TRUE);					


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
interface

function Gleich(psText1, psText2: string; pbTrimmed: Boolean = TRUE; pbUpperCase: boolean = TRUE): boolean; overload;
function Gleich(psText1 : string; pasText2 : Array of String; pbTrimmed: Boolean; pbUpperCase: boolean): boolean; overload;

implementation

function Gleich(psText1, psText2: string; pbTrimmed: Boolean = TRUE; pbUpperCase: boolean = TRUE): boolean;
begin
  if pbTrimmed then
    if pbUpperCase then
      Result := (Uppercase(Trim(psText1)) = Uppercase(Trim(psText2)))
    else
      Result := (Trim(psText1) = Trim(psText2))
  else if pbUpperCase then
    Result := (Uppercase(psText1) = Uppercase(psText2))
  else
    Result := (psText1 = psText2);
end;

function Gleich(psText1 : string; pasText2 : Array of String; pbTrimmed: Boolean; pbUpperCase: boolean): boolean;
var
    i : integer;
    lbResult : boolean;
begin
  lbResult := FALSE;
  For i := 0 to High(pasText2) do
  begin
    lbResult := lbResult or Gleich(psText1, pasText2[i], pbTrimmed, pbUppercase);
  end;
  Result := lbResult;
end;

end.


Was kann die Ursache sein? Irgendein Memory-Fehler? Bei einem ganz einfachen Programm funktioniert das selbst mit den Varianten Parametern. Deswegen vermute ich einen versteckten Memory-Effekt.

Habt Ihr damit Erfahrung?

_________________
Toleranz ist eine Grundvoraussetzung für das Leben.