AGB  ·  Datenschutz  ·  Impressum  







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

Fehlersuche bei Listen

Ein Thema von foxyteddy · begonnen am 6. Dez 2006 · letzter Beitrag vom 7. Dez 2006
Antwort Antwort
Seite 2 von 3     12 3      
Muetze1
(Gast)

n/a Beiträge
 
#11

Re: Fehlersuche bei Listen

  Alt 6. Dez 2006, 16:51
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:
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;
Weil sonst l^.Titel schon eine AV schmeissen würde.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: Fehlersuche bei Listen

  Alt 6. Dez 2006, 18:30
Zeige uns doch einmal die Einleseroutine, bitte.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Tastaturkürzel

Registriert seit: 6. Dez 2006
10 Beiträge
 
#13

Re: Fehlersuche bei Listen

  Alt 6. Dez 2006, 19:32
Zwischendurch schonmal ein großes DANKE für eure Hilfe
hier kommt der Code:

Delphi-Quellcode:
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;
da fuegehintean benutzt wird, auch diese:
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;
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#14

Re: Fehlersuche bei Listen

  Alt 6. Dez 2006, 21:17
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:
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;
Habe etwas an Deinem Code geändert in der Hoffnung das es nun besser läuft.

kopf -> erstesElement, erstesElement^.next -> zweitesElement,zweitesElement^.next -> nil ; nil = Listenende

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Tastaturkürzel

Registriert seit: 6. Dez 2006
10 Beiträge
 
#15

Re: Fehlersuche bei Listen

  Alt 6. Dez 2006, 21:54
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?
  Mit Zitat antworten Zitat
Meniskusschaden

Registriert seit: 1. Apr 2006
27 Beiträge
 
#16

Re: Fehlersuche bei Listen

  Alt 6. Dez 2006, 22:37
Zitat von Tastaturkürzel:
Delphi-Quellcode:
anz:=filesize(test);
FOR k:=0 TO (ANZ) DO
Liegt der Fehler vielleicht hier? Filesize liefert m.E. doch
die Dateigröße und nicht die Anzahl der Textzeilen.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#17

Re: Fehlersuche bei Listen

  Alt 7. Dez 2006, 09:01
Zitat von Tastaturkürzel:
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?
Deine Datei hat 18 Zeilen, pro Listenelement ließt Du 5 Zeilen ein
Delphi-Quellcode:
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;
Macht also 3 Listenelemente. Und einen Lesefehler weil Du über das Dateiende hinausließt.
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
Klaus
  Mit Zitat antworten Zitat
Tastaturkürzel

Registriert seit: 6. Dez 2006
10 Beiträge
 
#18

Re: Fehlersuche bei Listen

  Alt 7. Dez 2006, 13:43
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?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#19

Re: Fehlersuche bei Listen

  Alt 7. Dez 2006, 13:53
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:
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;
ein.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Tastaturkürzel

Registriert seit: 6. Dez 2006
10 Beiträge
 
#20

Re: Fehlersuche bei Listen

  Alt 7. Dez 2006, 17:13
Leider verstehe ich deinen letzten Quellcode nicht so ganz...?!? Was muss ich bei "daten" einsetzen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 22:18 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