AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Fehlermeldung: Listenindex überschreitet das Maximum(1)
Thema durchsuchen
Ansicht
Themen-Optionen

Fehlermeldung: Listenindex überschreitet das Maximum(1)

Ein Thema von Jansteger · begonnen am 9. Nov 2013 · letzter Beitrag vom 9. Nov 2013
Antwort Antwort
Seite 1 von 2  1 2      
Jansteger

Registriert seit: 18. Mär 2013
32 Beiträge
 
Delphi 7 Personal
 
#1

Fehlermeldung: Listenindex überschreitet das Maximum(1)

  Alt 9. Nov 2013, 18:56
Hallo,

Wenn ich beim beim Open- und Save-Dialog auf Abbrechen klicke kommt immer diese Fehlermeldung. Wie kann ich das beheben?

Quellcode:
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var
  List: TStrings;
begin
  List := TStringList.Create;
  try
    if SaveDialog1.Execute then
      List.LoadFromFile(SaveDialog1.FileName);
    if List.Count>0 then
      Edit1.Text:=List[0];
      Edit2.Text:=List[1];
      Edit3.Text:=List[2];
      Edit4.Text:=List[3];
      Edit5.Text:=List[4];
      Edit6.Text:=List[5];
      Edit7.Text:=List[6];
  finally
    List.Free;
  end;
end;
Jan
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#2

AW: Fehlermeldung: Listenindex überschreitet das Maximum(1)

  Alt 9. Nov 2013, 19:01
Ohne begin/end zu setzen, bezieht sich das if immer nur auf eine Zeile. Da steht also sowas:
Delphi-Quellcode:
    if SaveDialog1.Execute then
        List.LoadFromFile(SaveDialog1.FileName);

    if List.Count>0 then
        Edit1.Text:=List[0];

    Edit2.Text:=List[1];
    Edit3.Text:=List[2];
Jetzt mal schöner gruppiert. Mit begin/end geht's so:
Delphi-Quellcode:
if (Bedingung)
begin
    // Anweisungen
    // jetzt auch mehr als eine Zeile
end
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Fehlermeldung: Listenindex überschreitet das Maximum(1)

  Alt 9. Nov 2013, 19:02
Woher weißt du, dass in der Liste immer mindestens 7 Einträge vorhanden sind? Wenn du auf abbrechen drückst, könnte es sein, dass schon ein Eintrag in der Liste ist und er dann an der Stelle Edit2.Text:=List[1]; abschmiert.

Setz doch zum Test noch ein List.Clear; hinter dein Create der Liste um sicherzustellen, dass nichts in deiner Liste steht.

Des Weiteren würde ich auf die gewünschte Anzahl an Einträgen prüfen und nicht nur auf > 0. Prüfe, ob mindestens 7 Einträge in der Liste sind, damit beim Auslesen der Liste keine Fehler auftreten.

Edit: Das was JFHeins gesagt hat, kommt natürlich noch dazu. Hab ich total über"lesen".
  Mit Zitat antworten Zitat
Jansteger

Registriert seit: 18. Mär 2013
32 Beiträge
 
Delphi 7 Personal
 
#4

AW: Fehlermeldung: Listenindex überschreitet das Maximum(1)

  Alt 9. Nov 2013, 19:04
Mit begin/end funktioniert das.

Danke.
Jan
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

AW: Fehlermeldung: Listenindex überschreitet das Maximum(1)

  Alt 9. Nov 2013, 19:07
Die Datei hat keine 7 Zeilen, deshalb greift z.B. List[6] ins Leere.
Verwende einfach folgende Funktion:

Delphi-Quellcode:
// 1. Zeile eine Stringliste auslesen und Eintrag in Liste löschen
function GetFirstLine(list:TStrings):string;
begin
  if list.Count > 0 then
  begin
    result := list[0];
    list.Delete(0);
  end
  else
    result := 0;
end;

procedure TForm1.Button4Click(Sender: TObject);
var
  List: TStrings;
begin
  List := TStringList.Create;
  try
    if SaveDialog1.Execute then
      List.LoadFromFile(SaveDialog1.FileName)
    else
      Exit;

    Edit1.Text:=GetFirstLine(List);
    Edit2.Text:=GetFirstLine(List);
    Edit3.Text:=GetFirstLine(List);
    Edit4.Text:=GetFirstLine(List);
    Edit5.Text:=GetFirstLine(List);
    Edit6.Text:=GetFirstLine(List);
    Edit7.Text:=GetFirstLine(List);
  finally
    List.Free;
  end;
end;
PS: deine Vorgehensweise ist unsicher! Probier mal aus was passiert wenn in der Datei nur 5 Zeilen sind.
fork me on Github
  Mit Zitat antworten Zitat
Jansteger

Registriert seit: 18. Mär 2013
32 Beiträge
 
Delphi 7 Personal
 
#6

AW: Fehlermeldung: Listenindex überschreitet das Maximum(1)

  Alt 9. Nov 2013, 19:10
Ihr braucht keine Vorschläge mehr zu machen.
Es gibt jetzt keine Probleme mehr!

Mit begin und end in der IF-Schleife gibt es keine Fehlermeldung mehr
Jan
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#7

AW: Fehlermeldung: Listenindex überschreitet das Maximum(1)

  Alt 9. Nov 2013, 19:23
Laß das Exit weg.

Stattdessen ein Begin-End um alles (LoadFromFile bis hinter's Edit7.Text) drumrum ist doch auch ganz nett.

Außerdem:
- Warum wird eigentlich scheinbar ein SaveDialog für's Laden verwendet?
- Ich würde dir empfehlen den Komponenten ein paar orgentliche Namen zu geben, damit man weiß was was ist.
- Etwas Fehlerbehandlung kann nie schaden. (angefangen bei Try-Except, über eine Fehlermeldung, wenn die Datei nicht geladen wurde)
- Ich empfehle dir auch mal das Lesen/anschauen eines Tutorial für den Debugger und vorallem dessen Verwendung.

Zitat:
Wie kann ich das beheben?
Denn der Debugger hätte dir genau gezeigt, was da falsch läuft.
Und wenn du beim Testen auch mal den Datei-Dialog mit "Abbechen" oder mit einer zu kleinen Datei ausprobiert hättest, dann wäre dir dann auch das fehlende Begin-End aufgefallen.

Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var
  List: TStrings;
begin
  if OpenDialog1.Execute then begin
    List := TStringList.Create;
    try
      List.LoadFromFile(SaveDialog1.FileName);
      if List.Count = 7 then begin // oder > 6 bzw. >= 7
        Edit1.Text := List[0];
        Edit2.Text := List[1];
        Edit3.Text := List[2];
        Edit4.Text := List[3];
        Edit5.Text := List[4];
        Edit6.Text := List[5];
        Edit7.Text := List[6];
      end else
        ShowMessage('Ungültige Datei.');
    finally
      List.Free;
    end;
  end;
end;

Aber daß es wenigstens einen Ressourcenschutzblock (Try-Finally) gab, welcher auch noch richtig verwendet wurde, ist schonmal ein guter Anfang.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 9. Nov 2013 um 19:32 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.682 Beiträge
 
Delphi 5 Professional
 
#8

AW: Fehlermeldung: Listenindex überschreitet das Maximum(1)

  Alt 9. Nov 2013, 20:03
Mit begin und end in der IF-Schleife [...]
Da isse wieder, die "if-Schleife".

MfG Dalai
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#9

AW: Fehlermeldung: Listenindex überschreitet das Maximum(1)

  Alt 9. Nov 2013, 20:07
Denn der Debugger hätte dir genau gezeigt, was da falsch läuft.
Der Debugger ist unnötig, die Fehlermeldung sagt alles. Die Liste hat 0 Elemente, weil der Zugriff auf Element #1 den Fehler verursacht.
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#10

AW: Fehlermeldung: Listenindex überschreitet das Maximum(1)

  Alt 9. Nov 2013, 20:27
Delphi-Quellcode:
// 1. Zeile eine Stringliste auslesen und Eintrag in Liste löschen
function GetFirstLine(list:TStrings):string;
begin
  if list.Count > 0 then
  begin
    result := list[0];
    list.Delete(0);
  end
  else
    result := 0;
end;
Nur der Richtigkeit halber, bei result := 0; würdest einen Fehler erhalten, weil 0 ein Integer ist, Result aber ein String.
Also Result := '0';
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 02:30 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