Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Listenindex überschreitet Maximum(1) (https://www.delphipraxis.net/170401-listenindex-ueberschreitet-maximum-1-a.html)

DelphiUser1 15. Sep 2012 11:59

Listenindex überschreitet Maximum(1)
 
Ich weiß, es wurde jetzt schon oft genug gefragt, aber ich bin noch ein Anfänger und konnte aus den anderen Beiträgen nicht so viel entnehmen. Was ist falsch daran?:?
ich versuche aus der textdatei die kontaktdaten auszulesen und als Labels auszugeben. Die Datei wird Info(Benutzername).txt genannt.

Delphi-Quellcode:
procedure TForm3.FormCreate(Sender: TObject);
var sdd: TStrings;
begin
if Form3.Visible then
if FileExists(path+'Info'+Form1.Edit1.Text+'.txt') then
begin
sdd:=TStringList.Create;
sdd.LoadFromFile(path+'Info'+Form1.Edit1.Text+'.txt');
Label3.Caption:=sdd.Strings[0];
Label4.Caption:=sdd.Strings[1];
Label4.Caption:=sdd.Strings[2];
Label6.Caption:=sdd.Strings[3];
end;
end;

stahli 15. Sep 2012 12:40

AW: Listenindex überschreitet Maximum(1)
 
Mal ein Versuch, damit Du etwas weiter kommst:

Delphi-Quellcode:
procedure TForm3.FormCreate(Sender: TObject);
var
  sdd: TStringList; // identischer Typ mit Instanz
  FN: String; // damit nicht zwei mal die gleiche "Berechnung" verwendet werden muss
begin
  if Form3.Visible then
  begin
    FN := path+'Info'+Form1.Edit1.Text+'.txt';
    if FileExists(FN) then
      begin
        sdd := TStringList.Create;
        sdd.LoadFromFile(FN); // es ist unsicher, wie viele Zeilen in der StringList stehen
        if ssd.Count > 0 then
          Label3.Caption:=sdd[0]
        else
          Label3.Caption:='';
        if ssd.Count > 1 then
          Label4.Caption:=sdd[1]
        else
          Label4.Caption:='';
        if ssd.Count > 2 then
          Label4.Caption:=sdd[2] // müsste Label5 heißen?
        else
          Label4.Caption:='';
        if ssd.Count > 3 then
          Label6.Caption:=sdd[3]
        else
          Label6.Caption:='';
        FreeAndNil(ssd);
      end;
  end;
end;

himitsu 15. Sep 2012 12:41

AW: Listenindex überschreitet Maximum(1)
 
Fangen wir mal klein an:
Wir haben hier [code]- und sogar [delphi]-Tags, für die Quellcodes.
Delphi-Quellcode:
begin
  ShowMessage('Hallo');
end;
Warum gibst du dein erstellte TStringList (sdd) nicht wieder frei? (Speicherleck)



Und nun zum Problem:
Die Fehlermeldung sagt dir doch, was du falsch machst. (und der Debugger sagt dir sogar wo)

Du willst vermutlich auf eine Zeile (Index) der Stringliste zugreifen, welche es nicht gibt.

Laut Fehlermeldung ist eine Datei scheinbar nicht voll genug und entält nur eine Zeile (größter Index ist 0) und demnach kannst du da auch keine weiteren Zeilen (Index über 0) auslesen. :zwinker:



Und dann noch
Delphi-Quellcode:
if Form3.Visible then
.
Du bist doch schon in TForm3 drin, als solltest du auch nicht den Umweg über Form3 gehn (laß' das
Delphi-Quellcode:
Form3.
einfach weg)

[add]
Und es kann nichts schaden, wenn du etwas über Resourcenschutzblöcke lernst. (Try-Finally)

DelphiUser1 15. Sep 2012 14:07

AW: Listenindex überschreitet Maximum(1)
 
Danke erst mal für die schnelle und ausführliche Antwort (:
Ich habe stahlis Code mal versucht zu compilieren, leider ereilte mich das selbe Schicksal wie vorher, selbe Fehlermeldung :roll:
Die StringList freizugeben habe ich wohl ganz vergessen, danke für die Anmerkung.
Das seltsame ist, das meine Text-Datei 6 Zeilen hat..
Hier der Code zum abspeichern der Datei, vielleicht hilft der weiter: (Treg ist eine eigene Klasse TForm und sl und sd speichern einmal das Kennwort ab und einmal die Kontaktinformationen)

procedure TReg.Button1Click(Sender: TObject);
var sl, sd: TStrings;
begin
sl := TStringlist.Create;
sl.add(Edit1.Text);
sl.savetofile(path+ Edit2.Text +'.txt');
sd :=TStringlist.Create;
sd.Add(Form1.Edit3.Text);
sd.Add(Form1.Edit4.Text);
sd.Add(Form1.MaskEdit1.Text);
sd.Add(Form1.Edit6.Text);
sd.Add(Form1.ComboBox3.Text);
sd.SaveToFile(path+'Info'+Edit2.Text+'.txt');
sd.free;
sl.free;
Showmessage ('Sie haben erfolgreich ein Konto angelegt');
myForm.close;
Form1.Close;

nahpets 15. Sep 2012 14:37

AW: Listenindex überschreitet Maximum(1)
 
Hallo,

bitte ändere Deinen Quelltext mal entsprechend:
Zitat:

Zitat von DelphiUser1 (Beitrag 1182998)
Delphi-Quellcode:
procedure TForm3.FormCreate(Sender: TObject);
var sdd: TStrings;
begin
  if Form3.Visible then
  begin
    if FileExists(path+'Info'+Form1.Edit1.Text+'.txt') then
    begin
      sdd:=TStringList.Create;
      sdd.LoadFromFile(path+'Info'+Form1.Edit1.Text+'.txt');

      ShowMessage(IntToStr(sdd.Count)); // <!-- Diese Ausgabe muss mindestens den Wert 4 ergeben!!!
      ShowMessage(sdd.text) // <!-- Werden hier alle von Dir erwarteten Zeilen angezeigt oder nur eine?

      Label3.Caption:=sdd.Strings[0];
      Label4.Caption:=sdd.Strings[1];
      Label4.Caption:=sdd.Strings[2];
      Label6.Caption:=sdd.Strings[3];
      sdd.free;
    end;
  end;
end;

Sind die Ausgaben entsprechend Deinen Erwartungen? Andernfalls prüfe mal das Erstellen der Datei, ob hier eventuell Informationen verlorengehen.

himitsu 15. Sep 2012 15:20

AW: Listenindex überschreitet Maximum(1)
 
Wieso SchowMessage?

Man glaubt es kaum, aber der Debugger liefert genau die selben ergebnisse und das sogar schneller/einfacher.

nahpets 15. Sep 2012 15:26

AW: Listenindex überschreitet Maximum(1)
 
Zitat:

Zitat von himitsu (Beitrag 1183033)
Wieso SchowMessage?

Man glaubt es kaum, aber der Debugger liefert genau die selben ergebnisse und das sogar schneller/einfacher.

Weil das einfacher ist, als den Umgang mit dem Debugger zu erklären.

DelphiUser1 15. Sep 2012 15:38

AW: Listenindex überschreitet Maximum(1)
 
Ich habe das Problem gelöst, danke an alle die geholfen haben (:
Ich baue gerade Facebook mit Delphi nach, falls ihr zufällig Ideen zur Umsetzung habt, würde ich mich über Anmerkungen freuen :-D

sx2008 15. Sep 2012 16:04

AW: Listenindex überschreitet Maximum(1)
 
Zitat:

Zitat von DelphiUser1 (Beitrag 1183040)
Ich baue gerade Facebook mit Delphi nach

Lol :-D und ich baue gerade meinen eigenen Learjet auf.

Popov 15. Sep 2012 17:04

AW: Listenindex überschreitet Maximum(1)
 
Zitat:

Zitat von DelphiUser1 (Beitrag 1183040)
Ich baue gerade Facebook mit Delphi nach, falls ihr zufällig Ideen zur Umsetzung habt, würde ich mich über Anmerkungen freuen :-D

Viel Glück mit den Milliarden, aber wann du an die Börse gehst, ruf mich bitte nicht an ;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:55 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