Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Pointer = Fehler beim einlesen einer TXT Datei (https://www.delphipraxis.net/35884-pointer-%3D-fehler-beim-einlesen-einer-txt-datei.html)

Cyberbob_at_tot 13. Dez 2004 11:33


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

sakura 13. Dez 2004 11:35

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:...

Cyberbob_at_tot 13. Dez 2004 11:43

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!

alcaeus 13. Dez 2004 11:50

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

alcaeus 13. Dez 2004 12:08

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:
If aktuell^.next <> nil then begin aktuell:=aktuell^.next; Anzeigen; end;
Solcher Code ist unheimlich schwer zu lesen, soviel steht fest.
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:
new(aktuell);
letzter^.next:=aktuell;
aktuell^.prev:=letzter;
letzter:=aktuell;
aktuell^.next:=nil;
ich war bei verketteten Listen noch nie richtig gut, aber IMHO solltest du wohl zuerst den alten wegsichern:
Delphi-Quellcode:
aktuell^.prev := letzter;
letzter := aktuell;
new(aktuell);
letzer^.next := aktuell;
aktuell^.next := nil;
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.
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:
Aktuell:=Aktuell^.prev;
Füg darüber probeweise einfach mal das hier hinzu:
Delphi-Quellcode:
Aktuell^.Next := nil;
Greetz
alcaeus

Cyberbob_at_tot 13. Dez 2004 12:21

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

jim_raynor 13. Dez 2004 12:24

Re: Pointer = Fehler beim einlesen einer TXT Datei
 
Zitat:

Zitat von Cyberbob_at_tot
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 ?)

Das sollte dir helfen : http://www.delphi-source.de/grundlagen/styleguide/ (Der Styleguide in Deutsch für Delphi)

Cyberbob_at_tot 13. Dez 2004 12:51

Re: Pointer = Fehler beim einlesen einer TXT Datei
 
Zitat:

Weiters macht mich dieser Code ein bisschen stutzig:
Delphi-Quellcode:
new(aktuell);
letzter^.next:=aktuell;
aktuell^.prev:=letzter;
letzter:=aktuell;
aktuell^.next:=nil;

So wie ich das verstanden habe läuft das so...Erzeugen eines neuen Pointers, nun noch dem nach dem Letzten den Aktuellen zuordnen. Der Letzte wird nun zum Vorletzte und zum Schluss ist der Letzte der Aktuelle. Ich sehe da keinen Fehler!

Zitat:

ich war bei verketteten Listen noch nie richtig gut, aber IMHO solltest du wohl zuerst den alten wegsichern:
Delphi-Quellcode:
aktuell^.prev := letzter;
letzter := aktuell;
new(aktuell);
letzer^.next := aktuell;
aktuell^.next := nil;

Habe ich nun mal so eingeben, nun bekomme ich nur den falschen Eintrag zu sehen. Zumindest haben wir schonmal das Problem isoliert :-), Pointer ist einfach nicht mein Fall! aber wenn es die Schule so will naja!

Zitat:

Nach der Schleife hast du noch folgenden Code:
Delphi-Quellcode:
Aktuell:=Aktuell^.prev;
Füg darüber probeweise einfach mal das hier hinzu:
Delphi-Quellcode:
Aktuell^.Next := nil;

Das war eigenst nur dazu gedacht, den letzten Eintrag mit der krassen Zahl auszublenden. mehr sollte es nicht sein! daher kann man den Code einfach mal links liegen lassen!


@jim_raynor
Danke für den Styleguide, muß ich mir dann bei gelegenheit mal ansehen!

alcaeus 13. Dez 2004 12:54

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

jim_raynor 13. Dez 2004 13:35

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 17:32 Uhr.
Seite 1 von 2  1 2      

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