Ich habe bei folgendem Konstrukt Probleme:
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
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
Delphi-Quelltext
1:
| Erg := Gleich(Endung, ['PAS','PPT','DOC','XLS'], FALSE, TRUE); |
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.