Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - SetLength-Fehler


D. Annies - Mo 18.01.10 08:46
Titel: SetLength-Fehler
Hi, Delpher,

bei dem folgenden Code "steht" der Rechner:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
  n := 0;  
  SetLength(p,n+1);    // SetLength(p,10) geht bestens!
  assignfile(t1, label38.caption + 'pw.txt'); reset(t1);
  while not eof(t1) do 
  begin 
    readln(t1, p[n]); 
    inc(n); 
    SetLength(p,n);             // bei Setlength(p,10) weglassen
  end;
  closefile(t1);


Wenn ich den //-Code nehme, gehtes bestens, aber ich will ja das Array flexibel haben.
Wer hat eine Idee?

Gruß, Detlef


D. Annies - Mo 18.01.10 09:03

Hab den Fehler, Ich hatte eine Zeile später bei k = 1 abgefragt, scusi!
Det


jaenicke - Mo 18.01.10 09:14

Einen Tipp habe ich aber noch:
Wenn du das reset in der Zeile am Ende versteckst wie hier und dann den Code später einmal kopierst und umschreibst, dann fällt dir das vielleicht gar nicht auf. Und dann wunderst du dich wo der Fehler liegt, weil du nur jeweils den Zeilenanfang durchgehst und das reset übersiehst.
Deshalb sollte man wirklich immer nur einen Befehl in eine Zeile schreiben.

Zur Komponentenbezeichnung muss ich ja nix mehr sagen, das weißt du ja eigentlich selbst (label38...). :mrgreen:


D. Annies - Mo 18.01.10 11:08

Hi, Sebastian, :oops:

ich nenne label38 jetzt um in lHomeverzeichnis. Wäre das in deinem Sinne (hast ja recht) ok?

Danke, Detlef


jaenicke - Mo 18.01.10 11:30

Wie du es nennst ist ja deine Sache. Ich nenne visuelle Komponenten immer mit lbl, btn usw. am Anfang um es mir bequemer zu machen (lbl eingeben und ich sehe alle Labels usw.), andere finden das nicht gut.

Hauptsache ist ja nur, dass du sie dem Zweck entsprechend irgendwie benennst, damit du (und ggf. andere Programmierer) auch siehst welche Komponente du eigentlich da ansprichst bzw. gerade brauchst (ohne immer aufs Formular umzuschalten). ;-)


D. Annies - Mo 18.01.10 12:21

Hi, Sebastian,
ja, du hast recht l_ ist wohl zu kurz. Lbl ist "sprechender"
Danke, Detlef

P.S. Ich kann nicht in mehreren Dateien gleichzeitig suchen und ersetzen, oder?


jaenicke - Mo 18.01.10 13:32

user profile iconD. Annies hat folgendes geschrieben Zum zitierten Posting springen:
P.S. Ich kann nicht in mehreren Dateien gleichzeitig suchen und ersetzen, oder?
Parallel ist das ja kaum sinnvoll, denn die Festplatte hat nun einmal nur einen Lesekopf. ;-)
Deshalb ist nacheinander schon gut.


D. Annies - Mo 18.01.10 16:05

Hi, Seb,

und ich hatte noch überlegt, ob ich gleichzeitig als "gleichzeitig" schreibe ...
(Aber dann hätte ich ja nicht einen :wink: bekommen. Nein, das ist mir schon klar, was ich meinte, ich kann ja nach einem Wort (äh: String) in mehreren Dateien (den .pas Dateien des Projekts) suchen lassen, aber wohl doch nicht Suchen und Ersetzen - oder?

Gruß, Det


jaenicke - Mo 18.01.10 17:12

Ach so, in Delphi. :D

Dafür gibt es ja Refactoring, das ersetzt automatisch alle Vorkommen im Projekt. Einfach rechte Maustaste auf den Bezeichner, ob Variable oder Methode usw., dann Refactoring und umbenennen. Ggf. Vorschau ansehen und anwenden, fertig.
(Geht natürlich wie die meisten solchen Sachen erst ab Delphi 2005.)


D. Annies - Mo 18.01.10 19:46

Na, denn