AGB  ·  Datenschutz  ·  Impressum  







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

Dynamische Arrays

Ein Thema von Chris WF · begonnen am 15. Nov 2004 · letzter Beitrag vom 16. Nov 2004
Antwort Antwort
Benutzerbild von Chris WF
Chris WF

Registriert seit: 15. Nov 2004
27 Beiträge
 
Delphi 5 Standard
 
#1

Dynamische Arrays

  Alt 15. Nov 2004, 19:47
Delphi-Quellcode:
type
  TDatei = class
    name,pass: String;
  end;
  TDaten = class
    datei: array of TDatei;
    procedure Einlesen;
  end;
Delphi-Quellcode:
var
   Form1: TForm1;
   Daten: TDaten;

implementation

procedure TDaten.Einlesen;
var xdatei: textfile;
var dateiname: string;
var i,n: integer;
begin
   i := 0;
   dateiname := ExpandFileName('keys.txt');
   assignfile(xdatei,dateiname);
   reset(xdatei);
   repeat inc(i); readln(xdatei); until eof(xdatei);
   SetLength(daten.datei,i+1);
   for n := 0 to i do
   begin
      readln(xdatei,daten.datei[i].name);
      readln(xdatei,daten.datei[i].pass);
   end;
   closefile(xdatei);
end;
So, das Problem liegt im SetLength. Wenn ich das Programm schrittweise ausführe, kommt eine Fehlermeldung "Zugriffsverletzung bei Adresse ... "
Woran kann das liegen und wie kann ich das beheben?

Danke
Chris WF

Edit: Achso, da ist noch ein EOF-Problem, das hat aber nicht Priorität
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Dynamische Arrays

  Alt 15. Nov 2004, 19:53
Nach der Zeile:
inc(i); Ist i eins.
Hier
readln(xdatei,daten.datei[i].name); willst du aber auf das 0'te Element zugreifen nur da steht nichts drinne.

Und so was:
repeat inc(i); readln(xdatei); until eof(xdatei); Macht man nicht, weil sich das so gut wie gar nicht zeilenweise debuggen läßt.

Dann fällt mir noch das auf:
Delphi-Quellcode:
SetLength(daten.datei,i+1);
for n := 0 to i do
Auch das ist ungewöhnlich. Normalerweise läßt man ein 0 basierdendes Array von 0 bis Anzahlelement-1 laufen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
DerDan

Registriert seit: 15. Nov 2004
Ort: Donaueschingen
251 Beiträge
 
Delphi XE3 Professional
 
#3

Re: Dynamische Arrays

  Alt 15. Nov 2004, 19:58
So wie ich das sehe willst du zwei zusammengehöhrende Listen verwalten,

da würde ich zwei TStringList Objecte anlegen und in die eine den einen Wert und in den anderen den anderen Wert einspeichern.

Ich denke das ist einfacher.

Wenigstens mal drüber nachdenken

Gruß derDan
nichts ist so schön wie man es sich vorstellt
  Mit Zitat antworten Zitat
Benutzerbild von Chris WF
Chris WF

Registriert seit: 15. Nov 2004
27 Beiträge
 
Delphi 5 Standard
 
#4

Re: Dynamische Arrays

  Alt 15. Nov 2004, 20:01
Ist denn die Länge eines TStringsList im Programm änderbar?
  Mit Zitat antworten Zitat
DerDan

Registriert seit: 15. Nov 2004
Ort: Donaueschingen
251 Beiträge
 
Delphi XE3 Professional
 
#5

Re: Dynamische Arrays

  Alt 15. Nov 2004, 20:11
TStringList verwaltet belibig viele Strings, die beliebig lang sein können.

Delphi-Quellcode:
strListName := TStringList.Create;
strListPass := TStringList.Create;
.
.
.
strListName.Add (Name);
strListPass.Add (Pass);
...

auf die Strings zugreifen kannst du dann einfach mit

label.caption := strListName[i] + ' -> ' + strListPass[i]; i darf zwichen 0 und strListName.Count - 1 sein

DerDan
nichts ist so schön wie man es sich vorstellt
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Dynamische Arrays

  Alt 15. Nov 2004, 21:10
Moin Chris,

nicht zu vergessen:

Code:
for [color=red][b]n[/b][/color] := 0 to i do
   begin
      readln(xdatei,daten.datei[[color=red][b]i[/b][/color]].name);
Dein Schleifenzähler ist n, aber die Variable die als Index dient ist i.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von jim_raynor
jim_raynor

Registriert seit: 17. Okt 2004
Ort: Berlin
1.251 Beiträge
 
Delphi 5 Standard
 
#7

Re: Dynamische Arrays

  Alt 16. Nov 2004, 06:36
1. Ich kann mir gut vorstellen, dass es mit daten.datei zusammenhängt. Wird Daten überhaupt mit einem gültigen TDaten-Objekt versorgt? Wenn ja, dann ist es nicht sinnvoll so auf das Array zuzugreifen, da du dann immer das gleiche Array hast, auch wenn du mehere Instanzen von TDaten erstellst.
Nimm also lieber das daten. vorher immer weg.

2. Schleifenzähler wurde schon angesprochen. Zudem mach deine Schleife nur bis i-1 und bei SetLength machst du nur i statt i+1

3. Vor der Schleife mach ein Reset, dann beginnt er wieder beim Datei Anfang.
Christian Reich
Schaut euch mein X-COM Remake X-Force: Fight For Destiny ( http://www.xforce-online.de ) an.
  Mit Zitat antworten Zitat
Antwort Antwort


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 20:24 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