![]() |
Pointer = Fehler beim einlesen einer TXT Datei
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen,
habe ein Testprogramm geschrieben(Einfach DVD Datenbank) in der ich die Datensatz verwaltung mit Pointern regel. läuft auch soweit ganz gut, nur beim Einfügen einer TXT Datei, fügt er mir nach dem Letzten Datensatz noch einen hinzu mit einem Zahl 9688888 oder so! habe das Programm mal hinzugefügt, wer Lust hat und sich mit Pointern dann noch auskennt, kann es sich ja mal ansehen! Ich finde den fehler einfach nicht! BIG THX Cyberbob --- Bei Fragen einfach Posten! Antworte so bald wie möglich --- |
Re: Pointer = Fehler beim einlesen einer TXT Datei
Ist das das Programm, oder der Source Code. In der EXE selbst zu suchen ist nicht sinnvoll :zwinker:
...:cat:... |
Re: Pointer = Fehler beim einlesen einer TXT Datei
ist schon der Sourcecode! sonst wäre es ja schwachsinn!
Der fehler ist wohl irgentwo in der Prozedur einlesen oder beim einlesesn der TXT datei zu suchen! |
Re: Pointer = Fehler beim einlesen einer TXT Datei
@Sakura: es ist ein selbstextrahierendes rar-Archiv.
[edit]achso...da editiert er doch glatt seinen beitrag...naja, jetzt weiß ich wo ich suchen muss[/edit] Greetz alcaeus |
Re: Pointer = Fehler beim einlesen einer TXT Datei
Hi Cyberbob_at_tot,
ich habe mir mal deinen Quellcode angesehen, und ich muss sagen dass ich schockiert bin. Die Einrückungen sind katastrophal (mal 2 leerzeichen, mal einen tab, mal 5 leerzeichen, mal gar nichts), du verwendest Konstrukte für welche dir jeder halbwegs normale Programmierer den Hals umdrehn würde, z.B.
Delphi-Quellcode:
Solcher Code ist unheimlich schwer zu lesen, soviel steht fest.
If aktuell^.next <> nil then begin aktuell:=aktuell^.next; Anzeigen; end;
Nun zum Code der Einlesen-Prozedur: du rufst bei jedem Leseschritt SetLenght auf. Das ist vollkommen unnötig und frisst nur Speicher. Reservier für das Array 4 Felder, und dann fang an einzulesen. Weiters macht mich dieser Code ein bisschen stutzig:
Delphi-Quellcode:
ich war bei verketteten Listen noch nie richtig gut, aber IMHO solltest du wohl zuerst den alten wegsichern:
new(aktuell);
letzter^.next:=aktuell; aktuell^.prev:=letzter; letzter:=aktuell; aktuell^.next:=nil;
Delphi-Quellcode:
Zuerst speicherst du im aktuellen Datensatz die Adresse des vorherigen Datensatzes. Dann machst du den derzeit aktuellen zu deinem vorherigen, und anschließend erstellst du ein neues Feld. Dem next-Feld des vorherigen Datensatzes weißt du noch schnell die Adresse des aktuellen Datensatzes zu, und fertig.
aktuell^.prev := letzter;
letzter := aktuell; new(aktuell); letzer^.next := aktuell; aktuell^.next := nil; Und wenn du jetzt ganz gut nachdenkst, was passiert, sobald du beim nächsten Datensatz bist, sollte das Problem gelöst sein: Du erstellst ein neues Feld, und fügst es der Liste hinzu, egal ob noch ein Element kommt oder nicht. Nach der Schleife hast du noch folgenden Code:
Delphi-Quellcode:
Füg darüber probeweise einfach mal das hier hinzu:
Aktuell:=Aktuell^.prev;
Delphi-Quellcode:
Greetz
Aktuell^.Next := nil;
alcaeus |
Re: Pointer = Fehler beim einlesen einer TXT Datei
Danke erstmal für die krasse schnelle hilfe, ich schau mir das jetzt mal eben in ruhe an und antworte dann nochmal!
Aber zu der Schreibweise, habe ich so beim BERUFS KOLLEG BECKUM gelernt, also macht mich nicht dafür verantwortlich :-), werde mich bessern. Ich bin jung und brauch den Quellcode!!!! (habt ihr mal ein Vernünftigen Quellcode den ich mir mal ansehen kann ?) |
Re: Pointer = Fehler beim einlesen einer TXT Datei
Zitat:
![]() |
Re: Pointer = Fehler beim einlesen einer TXT Datei
Zitat:
Zitat:
Zitat:
@jim_raynor Danke für den Styleguide, muß ich mir dann bei gelegenheit mal ansehen! |
Re: Pointer = Fehler beim einlesen einer TXT Datei
Hallo Cyberbob_at_tot,
egal wozu die Zeile drinwar, die Zeile die du hinzufügen solltest dürfte dein Problem lösen. In den Funktionen für weiter etc. Prüfst du, ob das nächste Element nil ist. So wie du die Elemente erstellst wird immer ein Element zu viel in der Liste sein, und indem du dem vorletzten Element sagst, dass es kein nächstes gibt, wird das Anzeigen des Elements mit der "komischen" Zahl verhindert. IMHO solltest du aber den Code umbauen, um zu verhindern dass das letzte Element erstellt wird, obwohl es nicht benötigt wird. Greetz alcaeus |
Re: Pointer = Fehler beim einlesen einer TXT Datei
Noch ne kleine Schönheitskorrektur (sinnvoll oder nicht lass ich mal dahingestellt).
Bei Aktuell^.Next kann man sich das ^ sparen. Wenn du mit den Punkt-Operator auf einen Pointer gehst, wird autmoatisch dereferenziert. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:52 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