![]() |
Array of TStringList erzeugen
Hi!
Ich will für meinen Parser ein StringList-Array haben. Dazu hab ich schön ein array of TStrings deklariert. Jetzt will ich das Array mit dem Index 0 erzeugen. Bei folgendem Code denkt der Compiler aber, ich will auf einen String meiner StringListe zugreifen:
Delphi-Quellcode:
Wie kann ich denn aber sonst mit einem Stringlisten-array arbeiten? :?
Tokens[0] := TStringList.Create
|
Re: Array of TStringList erzeugen
:oops: Falscher Alarm, hatte zum Probieren das "array of" weggelassen :duck:
Allerdings wird eine Exception ausgelöst. Einmal die beiden einzigen Prozeduren in meinem Code:
Delphi-Quellcode:
Und einmal die Klassendeklaration von TTokenizer und var-Abschnitt:
constructor TTokenizer.Create;
begin Tokens[0] := TStringList.Create; end; procedure TForm2.FormCreate(Sender: TObject); begin Tokenizer := TTokenizer.Create; end;
Delphi-Quellcode:
Das bringt mir eine Speicher-Zugriffsverletzung... :?
type
TTokenizer = class(TObject) private public Tokens: array of TStrings; constructor Create; end; var Form2: TForm2; Tokenizer: TTokenizer; Parse: TParse; |
Re: Array of TStringList erzeugen
Hi,
der Code läuft zwar nicht könnte dir aber evtl. weiterhelfen
Delphi-Quellcode:
Der Codeschnipsel schon, du musst dir halt noch gedanken darüber machen wie du den Parser aufrufst.
Symbol = class(TObject)
procedure Add( aStr: string; aID: integer); overload; private StringList: TStringList; FList : TList; end; Lexer = class(TObject) constructor Create; private FFileName : string; FData : string; FPos : integer; Table : Symbol; end; { ... } // Parser procedure Symbol.Add(aStr: string; aID: integer); begin StringList.Add(AnsiLowerCase(aStr)); FList.Add(Pointer(aID)); end; // Lexer constructor Lexer.Create; begin Table := Symbol.Create; with Table do begin Add( s_tok_Programm, c_tok_Programm ); Add( s_tok_Unit, c_tok_Unit); Add( s_tok_Interface, c_tok_Interface); Add( s_tok_Implementation, c_tok_Implementation); Add( s_tok_Begin, c_tok_Begin); Add( s_tok_End, c_tok_End); end; end; |
Re: Array of TStringList erzeugen
@Nils: :gruebel: Ich wüsste nicht, wie mir der Code helfen soll. Ganz nebenbei gehts mir grade nur um die Erzeugung des TStringList-Arrays ;)
Gedanken über Parser kommen später. |
Re: Array of TStringList erzeugen
Moin Malo,
ich denke mal, der Fehler liegt hier:
Delphi-Quellcode:
TStrings ist eine abstrakte Klasse, von der man keine Instanzen bilden sollte.
Tokens: array of TStrings;
Nimm TStringList. |
Re: Array of TStringList erzeugen
Zitat:
Aber einen versuch waere es wert. Greetz alcaeus |
Re: Array of TStringList erzeugen
Zitat:
//edit: Es liegt aber am Array. Wenn ich eine einfache Instanz von TStringList erzeuge, funktioniert es wunderbar ;) |
Re: Array of TStringList erzeugen
Moin Andreas,
stimmt auch wieder, die Stelle hatte ich überlesen. @malo: es könnte bei einem dynamischen Array allerdings nicht schaden, wenn Du vor der Benutzung erst einmal Speicher reservierst (setlength). ;-) |
Re: Array of TStringList erzeugen
:wall: Hab ich auch grade rausgefunden. Hab mich nämlich an ein ähnliches Array-Problem vorher erinnert... funktioniert jetzt :)
|
Re: Array of TStringList erzeugen
Moin!
Und warum nicht einfacher mit einer TObjectList aus der Contnrs.pas anstatt einem dynamischen Arrays? MfG Muetze1 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:59 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