AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit dynamischem Array

Ein Thema von DevilsCamp · begonnen am 21. Jul 2005
Antwort Antwort
DevilsCamp
(Gast)

n/a Beiträge
 
#1

Problem mit dynamischem Array

  Alt 21. Jul 2005, 09:36
Ich habe die Explode Funktion aus der Code-Library so abgeändert, dass es
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:
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;
Es funktioniert einwandfrei doch leider habe ich in einem Projekt nun das Problem, das nur dort auftritt (weshalb auch immer).

hier ein Code-Schnipsel:
Delphi-Quellcode:
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
Nun habe ich das Problem, dass es auch sein kann, dass s den Wert "a||" haben kann.
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]
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:15 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