![]() |
zugriffsverletzung bei TStrings
hi
ich hab mir ein globalen tstrings gemacht und onbuttob1.click gesagt Data.loadfromfile(ShellTreeView1.path); ich hab was ausgewählt auf c:\ dann geklickt und zugriffsverletzung beim laden was ist das??? |
Re: zugriffsverletzung bei TStrings
TStrings ist eine abstrakte Klasse, die man nicht instantiiert.
Nutze stattdessen zum Beispiel TStringList. |
Re: zugriffsverletzung bei TStrings
Hallo
ein
Delphi-Quellcode:
hast du aber schon irgendwo stehen? das data.free natürlich auch nicht vergessen
data:=Tstringlist.create;
Mfg frank |
Re: zugriffsverletzung bei TStrings
das hat aber früher auch immer geklappt
das problem hatt ich nur wenn ichs lokal deklariere... ich hab früher immer sowas gemacht, und es hat geklappt :gruebel: :gruebel: :gruebel: hmm, werds versuchen Edit: ausprobiert, geht nicht: ich hab die deklaration lokal gemacht, ein Tstring.create hingetan und es ginbt einen fehler free dazu hilft auch nix |
Re: zugriffsverletzung bei TStrings
Zitat:
ein tstring.create gibts nicht. Data:=Tstrings.create führt zu nichts, das hat daniel schon gesagt. ansonsten poste deine routine und genau den fehler ... (kann man acuh mit strg+c kopieren) Mfg Frank |
Re: zugriffsverletzung bei TStrings
hmm, kann man mit TStringList genauso "arbeiten"?
|
Re: zugriffsverletzung bei TStrings
Tstrings ist die basisklasse, dort sind viele Methoden als abstrakt definiert, die erst in Tstringlist implementiert sind.
Wenn du nur data:=Tstrings.create verwendest, wirst du öfters einen abstract error zu gesicht bekommen, weil die methoden nicht vorhanden sind Gibt mal Tstringlist in der oh ein und drück auf siehe auch, das thema Arbeiten mit Stringlisten ist in der OH sehr ausführlich. |
Re: zugriffsverletzung bei TStrings
ja, ich nutz jetzt TStringlist
funzt aber immer noch nit :gruebel: :gruebel: also, das ding soll eine datei einlesen und zählen, wie oft jedes wort vorkommt kann man das noch optimieren bzw wo ist mein fehler?
Delphi-Quellcode:
bei der letzten forschleife sollen die ergebnisse ausgegeben werden...
procedure TForm1.Button1Click(Sender: TObject);
var wort:string; i:integer; data, woerter, zahlen:TStrings; begin //create Data:=TStringList.Create; Woerter:=TStringList.Create; zahlen:=TStringList.Create; //laden data.LoadFromFile(Shelltreeview1.Path); while i<length(data.Text) do Begin if data.Text[i]='' //wenn wort zuende then Begin if data.IndexOf(wort)<>-1 //wenn wort schon abgelegt, zähler erhöhen then zahlen.Strings[data.IndexOf(wort)]:=inttostr(strtoint(zahlen.Strings[data.IndexOf(wort)])+1) else Begin //sonst neu anlegen und zähler auf eins setzen data.Add(wort); zahlen.Add('1'); End; wort:=''; End else wort:=wort+data.Text[i]; //wenn wort nicht zuende dann buchstabe hinzufügen i:=i+1; end; for i:=0 to Woerter.Count-1 do ListBox1.Items.Add(zahlen[i]+' - '+woerter[i]); end; es kommt aber nichts.... |
Re: zugriffsverletzung bei TStrings
da sind mehrere Fehler:
1. die free´s für die 3 erstellten Stringlisten fehlen 2. string beginnen ab 1, dein
Delphi-Quellcode:
ist so nicht korrekt, da du von 0 anfängst. da fehlt ein i:=1;. außerdem ist bei '' mit sicherheit kein einzigstes Wort zu ende, du wolltest hier wohl schreiben ' ', kommas punkt etc. werden bei dir auch nicht berücksichtigt.
while i<length(data.Text) do
Begin if data.Text[i]='' //wenn wort zuende 3.
Delphi-Quellcode:
die woerter-stringliste sprichst du außer dort nie an, hier wird nie was drin stehen. stattdessen schreibst du
for i:=0 to Woerter.Count-1 do
Delphi-Quellcode:
und fügst dein Wort wieder zur data-liste hinzu. hier wolltest du wahrscheinlich schreiben : woerter.add(...).
data.Add(wort);
4. generell ist das mit der wort und zahlenliste nicht so ideal, hier ist villeicht ein dyn array besser, das hinufügen von zahlen und das umrechnen mit strtoint wird dich zeit kosten. außerdem würden bei dir "Ich" und "ich" zwei unterschieldiche Wörter sein. Such mal im Forum nach [dp]wörter zählen[/dp] hier gibt es ein paar wenige Beiträge die du dir mal anschauen solltest, du findest mit Sicherheit einen funktionierenden Algo, den du verwenden kannst. Mfg Frank |
Re: zugriffsverletzung bei TStrings
:oops: :oops: Ohhh :oops: :oops:
*schäm über dumme Fehler* naja, es soll auch lediglich ein tool sein, mit dem ich ne datei einlesen kann und ein überblick gewinnen kann was häufig dran kommt an wörtern. gut, mit . und , muss noch rein es soll dazu dienen: ich will einen tipptrainer machen, und ne funktion einbauen, dass man üben kannn oft genutzte wörter zu üben.... dazu brauch ich ne liste an oft genutzten wörtern ausserdem, das ding hab ich mir in ca einer halben stunde zusammengeschreinert.... thx fürs fehler finden... :thuimb: :thuimb: :thuimb: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:34 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