AGB  ·  Datenschutz  ·  Impressum  







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

Array of TStringList erzeugen

Ein Thema von malo · begonnen am 1. Mai 2005 · letzter Beitrag vom 2. Mai 2005
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#1

Array of TStringList erzeugen

  Alt 1. Mai 2005, 18:51
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:

Tokens[0] := TStringList.Create Wie kann ich denn aber sonst mit einem Stringlisten-array arbeiten?
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#2

Re: Array of TStringList erzeugen

  Alt 1. Mai 2005, 19:07
Falscher Alarm, hatte zum Probieren das "array of" weggelassen

Allerdings wird eine Exception ausgelöst. Einmal die beiden einzigen Prozeduren in meinem Code:

Delphi-Quellcode:
constructor TTokenizer.Create;
begin
  Tokens[0] := TStringList.Create;
end;

procedure TForm2.FormCreate(Sender: TObject);
begin
  Tokenizer := TTokenizer.Create;
end;
Und einmal die Klassendeklaration von TTokenizer und var-Abschnitt:

Delphi-Quellcode:
type
  TTokenizer = class(TObject)
    private

    public
      Tokens: array of TStrings;

      constructor Create;
    end;

var
  Form2: TForm2;
  Tokenizer: TTokenizer;
  Parse: TParse;
Das bringt mir eine Speicher-Zugriffsverletzung...
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#3

Re: Array of TStringList erzeugen

  Alt 1. Mai 2005, 19:10
Hi,

der Code läuft zwar nicht könnte dir aber evtl. weiterhelfen

Delphi-Quellcode:
  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;
Der Codeschnipsel schon, du musst dir halt noch gedanken darüber machen wie du den Parser aufrufst.
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#4

Re: Array of TStringList erzeugen

  Alt 1. Mai 2005, 19:26
@Nils: 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.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Array of TStringList erzeugen

  Alt 1. Mai 2005, 19:30
Moin Malo,

ich denke mal, der Fehler liegt hier:

Tokens: array of TStrings; TStrings ist eine abstrakte Klasse, von der man keine Instanzen bilden sollte.
Nimm TStringList.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#6

Re: Array of TStringList erzeugen

  Alt 1. Mai 2005, 19:32
Zitat von Christian Seehase:
Moin Malo,

ich denke mal, der Fehler liegt hier:

Tokens: array of TStrings; TStrings ist eine abstrakte Klasse, von der man keine Instanzen bilden sollte.
Nimm TStringList.
Nein. Er erstellt keine Instanz von TStrings, sondern von TStringList. Allerdings kann man aufgrund des OOP-Prinzips einer TStrings-Variable auch ein TStringList-Objekt zuweisen.
Aber einen versuch waere es wert.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#7

Re: Array of TStringList erzeugen

  Alt 1. Mai 2005, 19:33
Zitat von Christian Seehase:
Moin Malo,

ich denke mal, der Fehler liegt hier:

Tokens: array of TStrings; TStrings ist eine abstrakte Klasse, von der man keine Instanzen bilden sollte.
Nimm TStringList.
Wie alcaeus bereits sagte, erzeuge ich eine Instanz von TStringList. Funktioniert aber trotzdem nicht...

//edit: Es liegt aber am Array. Wenn ich eine einfache Instanz von TStringList erzeuge, funktioniert es wunderbar
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Array of TStringList erzeugen

  Alt 1. Mai 2005, 19:35
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).
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von malo
malo

Registriert seit: 19. Sep 2004
2.115 Beiträge
 
#9

Re: Array of TStringList erzeugen

  Alt 1. Mai 2005, 19:36
Hab ich auch grade rausgefunden. Hab mich nämlich an ein ähnliches Array-Problem vorher erinnert... funktioniert jetzt
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#10

Re: Array of TStringList erzeugen

  Alt 1. Mai 2005, 21:59
Moin!

Und warum nicht einfacher mit einer TObjectList aus der Contnrs.pas anstatt einem dynamischen Arrays?

MfG
Muetze1
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 08:13 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