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 Listenindex überschritten bei Count (https://www.delphipraxis.net/137158-listenindex-ueberschritten-bei-count.html)

aaaaaaaaaa_10 15. Jul 2009 10:19


Listenindex überschritten bei Count
 
Hallo,

Ich habe folgendes vor:
Ich erstelle eine Datei, welche sich die Strings aus einer anderen Datei holt. Da ich aber nur die erste und letzte Zeile brauche, wollte ich den Rest einfach wieder löschen. Nun hab ich aber folgenden Feher:

Delphi-Quellcode:
procedure TMomFiles.DreiSekDateiFuellen(const Filename: string);
var
  F: TStringList;
  LogDatei, DatName : String;
  i : integer;

begin
  DatName := extractfilepath(application.exename)+'Mom3sek_'+Kennung+'.txt';
  F := TStringList.Create;
  try
    LogDatei := extractfilepath(application.exename)+'mom'+Kennung+'.log';
    F.LoadFromFile(Logdatei);
    for i := 2 to F.Count-1 do  [b]// Fehler: ListenIndex überschreitet das Maximum[5][/b]
    begin
    F.Delete(i);
    end;
     F.SaveToFile(DatName);
  finally
    F.Free;
  end;
end;
Was ist hier verkehrt?

Klaus01 15. Jul 2009 10:20

Re: Listenindex überschritten bei Count
 
Guten Morgen,

indizierte Listen immer rückwärts löschen.

Grüße
Klaus

HeikoAdams 15. Jul 2009 10:22

Re: Listenindex überschritten bei Count
 
Probier es mal damit:
Delphi-Quellcode:
procedure TMomFiles.DreiSekDateiFuellen(const Filename: string);
var
  F: TStringList;
  LogDatei, DatName : String;
  i : integer;

begin
  DatName := extractfilepath(application.exename)+'Mom3sek_'+Kennung+'.txt';
  F := TStringList.Create;
  try
    LogDatei := extractfilepath(application.exename)+'mom'+Kennung+'.log';
    F.LoadFromFile(Logdatei);
    for i := F.Count-1 downto 2 do
    begin
    F.Delete(i);
    end;
     F.SaveToFile(DatName);
  finally
    F.Free;
  end;
end;

Luckie 15. Jul 2009 10:25

Re: Listenindex überschritten bei Count
 
Zitat:

Zitat von Klaus01
indizierte Listen immer rückwärts löschen.

Das stimmt nicht ganz. Indizierte listen kann man auch vorwärts löschen, dann aber nicht mit einer for-Schleife. Zur Erklärung: Bei for-Schleifen wird die Abbruchbedingung einmalig vor der Schleife geprüft. Wenn man jetzt Einträge aus der Liste löscht, stimmt die Anzahl der aktuellen Eintraäge nicht mit der Anzahl der Einträge bei Schleifeneintriit über ein, es sind weniger und dann kommt es zu dem Fehler, dass der Listenindex größer ist, als die Anzahl der Einträge. Mit einer while-Schleife könnte man das umgehen oder man lässt die Schleife, wie schon vorgeschlagen, rückwärts laufen.

aaaaaaaaaa_10 15. Jul 2009 10:26

Re: Listenindex überschritten bei Count
 
Vielen Dank, es geht. Das muss man natürlich wissen... Aber woher.. ?

Gibt es sonst noch eine andere (bessere) Möglichkeit aus einer Datei die erstel und letzte Zeile zu lesen?

Luckie 15. Jul 2009 10:30

Re: Listenindex überschritten bei Count
 
Zitat:

Zitat von aaaaaaaaaa_10
Vielen Dank, es geht. Das muss man natürlich wissen... Aber woher.. ?

In dem man sich mal überlegt, was da passiert? ;)

Zitat:

Gibt es sonst noch eine andere (bessere) Möglichkeit aus einer Datei die erstel und letzte Zeile zu lesen?
Lad sie in eine Stringliste. Die erste Zeile hat den Index 0 und die letzte Count - 1.

hoika 15. Jul 2009 10:32

Re: Listenindex überschritten bei Count
 
Hallo,

Zitat:

Vielen Dank, es geht. Das muss man natürlich wissen... Aber woher.. ?
Watch-Point's benutzen (Count, Stringlist[i])

mit StringList ist es am einfachsten.
Statt alles ausser der 1. und letzten Zeile zu löschen,
mache doch folgendes:

SL_1: TStringList; // alle Zeilen
SL_2: TStringList; // nur die 1. und letzte Zeile

SL_1.LoadFromFile usw.

SL_2.Add(SL_1[0];
SL_2.Add(SL_1[SL_1.Count-1];

jetzt noch abfangen, wenn SL_1 nur eine Zeile enthält
und das wars.


Heiko

aaaaaaaaaa_10 15. Jul 2009 10:33

Re: Listenindex überschritten bei Count
 
Zitat:

Lad sie in eine Stringliste. Die erste Zeile hat den Index 0 und die letzte Count - 1.
Hab ich das damit
Delphi-Quellcode:
F.LoadFromFile(Logdatei);
nicht getan?

Luckie 15. Jul 2009 10:34

Re: Listenindex überschritten bei Count
 
Doch hast du. Ich wollte deine Frage nur erschöpfend beantworten und habe mich dabei wohl wiederholt.

aaaaaaaaaa_10 15. Jul 2009 10:38

Re: Listenindex überschritten bei Count
 
:-D Trotzdem Danke
Heiko, deine Idee hab ich umgesetzt, ist für das weitere Programm sinvoller... Danke. Bis demnächst


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