![]() |
Problem mit dynamischem Array
Ich habe die Explode Funktion aus der
![]() 1. eine Prozedure ist und 2. das Ziel Array in der Parameterliste steht (nötig um Integer-Arrays und Extended-Arrays auch nutzen zu können mit overload) Hier ist, was ich draus gemacht habe:
Delphi-Quellcode:
Es funktioniert einwandfrei doch leider habe ich in einem Projekt nun das Problem, das nur dort auftritt (weshalb auch immer).
Type
TStrArray = Array of String; procedure Explode(const Werte, Trenner: string; var ResArray: TStrArray; Limit: Integer = 0); var SepLen: Integer; F, P: PChar; ALen, Index: Integer; begin SetLength(ResArray, 0); if (Werte = '') or (Limit < 0) then Exit; if Trenner = '' then begin SetLength(ResArray, 1); ResArray[0] := Werte; Exit; end; SepLen := Length(Trenner); ALen := Limit; SetLength(ResArray, ALen); Index := 0; P := PChar(Werte); while P^ <> #0 do begin F := P; P := AnsiStrPos(P, PChar(Trenner)); if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then P := StrEnd(F); if Index >= ALen then begin Inc(ALen, 5); SetLength(ResArray, ALen); end; SetString(ResArray[Index], F, P - F); Inc(Index); if P^ <> #0 then Inc(P, SepLen); end; if Index < ALen then SetLength(ResArray, Index); end; hier ein Code-Schnipsel:
Delphi-Quellcode:
Nun habe ich das Problem, dass es auch sein kann, dass s den Wert "a||" haben kann.
procedure BlaBla;
var smem : TStrArray; inifile : TIniFile; begin // Ewig viel Code // in dem smem auch schon benutzt wird // s := IniFile.ReadString('Sektion', 'Schlüssel', ''); // Der Wert sollte die Form haben: a||b, c, d Explode(s, '||', smem); t := smem[0]; v := smem[1]; // // noch mehr Code Praktisch hat smem demzufolge nur EINEN Eintrag, aber trotzdem bekomme ich KEINEN Fehler, wenn ich auf smem[1] zugreifen will. Da ich ja in der Explode-Prozedur die Länge von ResArray (was ja smem ist) als erstes auf 0 setze, sollte also eine vorherige Belegung von smem keine Auswirkung haben. Leider ist dieses Problem wie schon erwähnt nicht reproduzierbar in anderen Projekten, aber vielleicht hat einer von Euch eine Idee, was da los sein könnte... [edit] Wenn ich nach dem Explode-Aufruf die Länge von smem überprüfe, bekomme ich bei meinem Problem als Länge den Wert 1. Es ist also definitiv eigentlich nur smem[0] ansprechbar, smem[1] sollte, wie bei jedem anderen Projekt dann auch, eine Fehlermeldung bringen [/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:04 Uhr. |
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