Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi zugriffsverletzung bei TStrings (https://www.delphipraxis.net/25065-zugriffsverletzung-bei-tstrings.html)

glkgereon 30. Jun 2004 16:13


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???

Daniel 30. Jun 2004 16:15

Re: zugriffsverletzung bei TStrings
 
TStrings ist eine abstrakte Klasse, die man nicht instantiiert.
Nutze stattdessen zum Beispiel TStringList.

Keldorn 30. Jun 2004 16:16

Re: zugriffsverletzung bei TStrings
 
Hallo

ein
Delphi-Quellcode:
data:=Tstringlist.create;
hast du aber schon irgendwo stehen? das data.free natürlich auch nicht vergessen

Mfg frank

glkgereon 30. Jun 2004 16:17

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

Keldorn 30. Jun 2004 16:23

Re: zugriffsverletzung bei TStrings
 
Zitat:

ginbt einen fehler
Ehrlich gesagt sollte man mit 500 posts in der lage sein, den fehler zu beschreiben, es gibt nämlich mehr als einen.
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

glkgereon 30. Jun 2004 16:32

Re: zugriffsverletzung bei TStrings
 
hmm, kann man mit TStringList genauso "arbeiten"?

Keldorn 30. Jun 2004 16:39

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.

glkgereon 30. Jun 2004 17:31

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:
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;
bei der letzten forschleife sollen die ergebnisse ausgegeben werden...
es kommt aber nichts....

Keldorn 30. Jun 2004 18:04

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:
while i<length(data.Text) do
    Begin
    if data.Text[i]='' //wenn wort zuende
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.
3.
Delphi-Quellcode:
for i:=0 to Woerter.Count-1 do
die woerter-stringliste sprichst du außer dort nie an, hier wird nie was drin stehen. stattdessen schreibst du
Delphi-Quellcode:
data.Add(wort);
und fügst dein Wort wieder zur data-liste hinzu. hier wolltest du wahrscheinlich schreiben : woerter.add(...).
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

glkgereon 30. Jun 2004 20:11

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 00:55 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