Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Problem mit SetLength (https://www.delphipraxis.net/146657-problem-mit-setlength.html)

gangs-taas 24. Jan 2010 18:33


Problem mit SetLength
 
Hey,
ich hab ein Problem mit Setlength was ich überhaupt nicht versteh,
ich vermute aber ihr werdet mir wiedermal nach einem Blick sagen könn wo dran es liegt
ich hab das hier gemacht :

Delphi-Quellcode:
 procedure Element_hinzufügen(Text : String; var Liste : Array of String);
    var
      y : integer ;
    begin
      y := Length(Liste);
      SetLength(Liste,y+1);
      Liste[y-1] := Text
    end;
ich bekomme nun aber in der Zeile "Liste := SetLength(Liste,y+1);" den Fehler [Pascal Fehler] U_Daten_Verarbeiten.pas(114): E2008 Inkompatible Typen

wisst ihr wodran das liegt ?

ich hab doch y als integer definiert und laut delphi-hilfe müsste die neue Länge ein Integerwert sein

das ist doch gegeben oder nicht ?!

mkinzler 24. Jan 2010 18:37

Re: Problem mit SetLength
 
Aber Liste nicht

gangs-taas 24. Jan 2010 18:39

Re: Problem mit SetLength
 
aber es steht doch :
Beschreibung
S ist eine Delphi-String- oder dynamische Array-Variable.

und Liste ist ein dynamisches Array oder nicht ?!

Luckie 24. Jan 2010 18:41

Re: Problem mit SetLength
 
Definier dir dein String Array mal als Typ. Aber davon mal abgesehen, was spricht gegen eine StringListe? Da sparst du dir das ganze.

fui-tak 24. Jan 2010 18:43

Re: Problem mit SetLength
 
Hab's gerade mal getestet, du hast wahrscheinlich sowas gemacht
Delphi-Quellcode:
a: array [2..10] of string; //Hier legst du fest, dass das Array a nicht dynamisch ist, darum gibt's nen Fehler in setLength
...
Element_hinzufügen(15,a);
so müsste es funktionieren:
Delphi-Quellcode:
a: array of string; //einfach die Längenangabe weglassen
...
Element_hinzufügen(15,a);

gangs-taas 24. Jan 2010 18:46

Re: Problem mit SetLength
 
das Problem ist ich möchte dass die Elemte die ich einsortiere zusammen bleiben

d.h. ich möchte sie auch einzelnd ansprechen könn z.b. Liste[i] ...
aber wenn ich ne StringList nutze sortiert der die alle in die selbe zeile ..

wenn ich z.b. dann Liste.text auswerte sind da nicht mehrere Zeilen sondern nur eine ...

und nein ich hatte dem keine feste größe geben das hier hab ich gemacht :


Delphi-Quellcode:
procedure TBearbeiten.Termine_Verarbeiten(TerminText: string; Datum: TDateTime; var Aktuelle_Termine: array of TStringList);
var
  pos1 : Integer ;
  TerminListe : Array of String ; // <= keine Längenangabe
  Acht_Tage : Array of TStringlist ;

  procedure Strings_Einsortieren(var Text : String; var Liste : Array of String ) ;
  var
    Start_pos1,
    End_Pos1: integer ;
    SubString : String ;

    procedure Element_hinzufügen(Text : String; var Liste : Array of String);
    var
      y : integer ;
    begin
      y := Length(Liste);
      SetLength(Liste,y+1);
      Liste[y-1] := Text
    end;

  begin
    Repeat
      Start_Pos1 := Pos('<',Text);
      End_Pos1 := pos('>',Text);
      End_Pos1 := PosEx('>',Text,End_Pos1+1);
      SubString := Copy(Text,Start_Pos1,End_Pos1);
      Element_hinzufügen(SubString,Liste) ;
      Text := Copy(Text,End_Pos1+1);
    until Pos('<',Text) = 0 ;
  end;

begin
  pos1 := Pos('}',TerminText);
  TerminText := Copy(TerminText,Pos1 + 1);
  Strings_Einsortieren(TerminText,TerminListe);
end;

himitsu 24. Jan 2010 18:46

Re: Problem mit SetLength
 
Delphi-Quellcode:
Liste : Array of String
Das geht nicht für VAR-Parameter, da Delphi eine strickte Typenunterscheidung hat.
Soeine Definition erstellt kein "richtiges" dynamisches Array und deßhalb ist es inkompatibel zu SetLength.

Delphi-Quellcode:
type TMyStringArray = Array of String;

procedure Element_hinzufügen(Text : String; var Liste : TMyStringArray);
oder
Delphi-Quellcode:
procedure Element_hinzufügen(Text : String; var Liste : TStringDynArray);

Luckie 24. Jan 2010 18:50

Re: Problem mit SetLength
 
Zitat:

Zitat von gangs-taas
wenn ich z.b. dann Liste.text auswerte sind da nicht mehrere Zeilen sondern nur eine ...

Man muss sie natürlich auch richtig anwenden. Man kann auch auf einzelne Zeilen der StringListe zugreifen. Einfach nur mal die Hilfe bemühen.
Delphi-Quellcode:
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  try
    sl.Add('foo');
    sl.Add('bar');
    ShowMessage(sl.Strings[0]);
  finally
    sl.Free;
  end;

gangs-taas 24. Jan 2010 18:52

Re: Problem mit SetLength
 
oh
danke :)


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