![]() |
Re: Fehlersuche bei Listen
Kannst du dir sicher sein, dass AusgabeListe() niemals einen NIL Zeiger bekommt? Also wenn z.B. die Liste leer ist? Weil wenn dies nicht 100%ig gewährleistet ist, dann folgendes:
Delphi-Quellcode:
Weil sonst l^.Titel schon eine AV schmeissen würde.
PROCEDURE ausgabeListe(L:Listenzeiger);
BEGIN If l <> Nil Then Begin ausgabeformular.titelaus.Items.add(l^.Titel); ausgabeformular.genreaus.Items.add(l^.genre); ausgabeformular.jahraus.Items.add(l^.jahr); ausgabeformular.regiseuraus.Items.add(l^.Regisseur); ausgabeformular.schauspieleraus.Items.add(l^.schauspieler); End; END; |
Re: Fehlersuche bei Listen
Zeige uns doch einmal die Einleseroutine, bitte.
Grüße Klaus |
Re: Fehlersuche bei Listen
Zwischendurch schonmal ein großes DANKE für eure Hilfe;)
hier kommt der Code:
Delphi-Quellcode:
da fuegehintean benutzt wird, auch diese:
PROCEDURE listeLaden(L:Listenzeiger);
var a,b,c,d,e:STRING; k,anz:INTEGER; begin assignfile(test,'test.txt'); reset(test); anz:=filesize(test); FOR k:=0 TO (ANZ) DO BEGIN readln(test,a); readln(test,b); readln(test,c); readln(test,d); readln(test,e); FuegeHintenAn(a,b,c,d,e,l); END; closefile(test); kopf:=l; {ausgabeformular.TitelAUS.Items.Add(a); ausgabeformular.GenreAUS.Items.Add(b); ausgabeformular.JahrAUS.Items.Add(c); ausgabeformular.RegiseurAUS.Items.Add(d); ausgabeformular.SchauspielerAUS.Items.Add(e);} end;
Delphi-Quellcode:
PROCEDURE FuegeHintenAn (Titel,Genre,Regisseur,Jahr,Schauspieler:STRING; VAR L : ListenZeiger);
VAR p,lauf : ListenZeiger; BEGIN NEW(p); p^.Titel:=Titel; p^.Genre:=Genre; p^.Regisseur:=Regisseur; p^.Jahr:=Jahr; p^.Schauspieler:=Schauspieler; p^.Next:=NIL; IF IstListeLeer(L) THEN L:=p ELSE BEGIN lauf:=L; WHILE lauf^.Next<>NIl DO lauf:=lauf^.Next; lauf^.Next:=p END END; |
Re: Fehlersuche bei Listen
Delphi-Quellcode:
PROCEDURE FuegeHintenAn (Titel,Genre,Regisseur,Jahr,Schauspieler:STRING; VAR kopf,L : ListenZeiger);
VAR p : ListenZeiger; BEGIN NEW(p); p^.Titel:=Titel; p^.Genre:=Genre; p^.Regisseur:=Regisseur; p^.Jahr:=Jahr; p^.Schauspieler:=Schauspieler; p^.Next:=NIL; IF Not IstListeLeer(L) THEN L^.next:=p; // Vorgängerelement^.next bekommt die Adresse des neuen Listenelementes else kopf:=p; // erstes Element in der Liste L:=p; // Listenzeiger zeigt auf das neue Listenelement END;
Delphi-Quellcode:
Habe etwas an Deinem Code geändert in der Hoffnung das es nun besser läuft.
PROCEDURE listeLaden(L:Listenzeiger);
var a,b,c,d,e:STRING; k,anz:INTEGER; begin assignfile(test,'test.txt'); reset(test); anz:=filesize(test); FOR k:=0 TO (ANZ) DO BEGIN readln(test,a); readln(test,b); readln(test,c); readln(test,d); readln(test,e); FuegeHintenAn(a,b,c,d,e,kopf,l); END; closefile(test); // kopf:=l; das ist falsch, weil Du da den Kopf immer auf das letzte Element zeigen läßt // der Kopf sollte auf das erste Element zeigen {ausgabeformular.TitelAUS.Items.Add(a); ausgabeformular.GenreAUS.Items.Add(b); ausgabeformular.JahrAUS.Items.Add(c); ausgabeformular.RegiseurAUS.Items.Add(d); ausgabeformular.SchauspielerAUS.Items.Add(e);} end; kopf -> erstesElement, erstesElement^.next -> zweitesElement,zweitesElement^.next -> nil ; nil = Listenende Grüße Klaus |
Re: Fehlersuche bei Listen
Also der Fehler ist mitlerweile verschwunden...aber das war er ja eben auch bereits. Ein letzten Versuch mach ich noch, danach danke ich euch und lasse es auf sich beruhen denke ich.
Also meine Textdatei beinhaltet ca. 18 einträge. Wenn ich das ganze mir nun im Programm über die nun bekannte Ausgabe ausgeben lasse, bekomme ich 7 einträge richtig (glaube ich^^) angezeigt. Die 8.Ausgabe ist leer und danach passiert um genau zu sein NIX. Ne idee? |
Re: Fehlersuche bei Listen
Zitat:
die Dateigröße und nicht die Anzahl der Textzeilen. |
Re: Fehlersuche bei Listen
Zitat:
Delphi-Quellcode:
Macht also 3 Listenelemente. Und einen Lesefehler weil Du über das Dateiende hinausließt.
FOR k:=0 TO (ANZ) DO
BEGIN readln(test,a); readln(test,b); readln(test,c); readln(test,d); readln(test,e); FuegeHintenAn(a,b,c,d,e,kopf,l); END; Mußt Du das mit TextDateien machen, es würde meines Erachtens einfacher mit Records zu arbeiten, ein Listenelement = 1 Datensatz(Record). Edit1: Aus der Delphi Hilfe: Note: FileSize can't be used on a text file. Da hat Meniskusschaden wohl einen guten Ansatz geliefert. Grüße Klaus |
Re: Fehlersuche bei Listen
Also es waren schon 18 elemente a 5 strings. Denke aber das Hauptproblem liegt in der geschichte mit filesize. Nur wenn ich jetzt auf RECORDS umstellen will, würde ich doch alles abändern müssen (vor allem speichern und laden?!?) oder irre ich mich?
|
Re: Fehlersuche bei Listen
ein wenig umstellen, schon.
Aber du brauchst dann halt nur einmal einen Datensatz einlesen umd alle 5 Strings zu lesen. Der Record bindet halt alle Informationen eines Datensatzes zu einem Päckchen zusammen. Oder Du liest die Daten mit
Delphi-Quellcode:
ein.
Zeile:=0;
while not eof(DeineDatei) do begin inc(zeile); ReadLn(DeineDatei,Daten); Case Zeile of 1: a := daten; 2: b := daten; 3: c := daten; 4: d := daten 5: begin e:= daten; Zeile := 0; end; end; end; Grüße Klaus |
Re: Fehlersuche bei Listen
Leider verstehe ich deinen letzten Quellcode nicht so ganz...?!? Was muss ich bei "daten" einsetzen
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:36 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