![]() |
for I := 1 to SL.Count do; oder for I := 0 to SL.Count -1 do
Hi,
mein Freund hat mir gerade folgenden Code gegeben:
Delphi-Quellcode:
ich hab zu ihm gesagt, das da nen Bock drinne ist. Es müsste nämlich for I := 0 to SL.Count - 1 do heißen.
function Anzahl : Integer;
var loc : TStringlist; i : Integer; begin loc := TStringlist.Create; try loc.LoadFromFile('dc.loc'); SetLength(Datei,Loc.Count); for i := 1 to Loc.Count do begin Datei[i] := TDatei.Create; end; Result := loc.Count; finally loc.Free; end; end; Er sagte mir dazu noch dies: Zitat:
Zeile 1 = Count 0; Zeile 2 = Count 1; Jetzt wollte ich wissen, was nun richtig? |
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
Bei einer Zeile ist Count = 1 aber der INDEX der ersten Zeile ist 0 !!
PS : Der Freund bin ich :mrgreen: |
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
Die erste Zeile einer Stringliste hat immer den Index 0. Deshalb darf die Schleife auch nur bis Count-1 laufen.
|
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
@ Luckie : Du verstehst nicht genau worum es geht.
Es sollen soviele TDatei erstellt werden wie die Datei Zeilen hat. Bei zwei Zeile ist Count = 2 also
Delphi-Quellcode:
Und das erzeugt 2 TDatei !!
for i:= 1 to 2 do begin
end; |
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
NeutralGeneral liegt richtig.
Aenogym |
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
Ist
Delphi-Quellcode:
aber nicht ein dynamisches Array, das in dem Fall bei Null beginnt? :gruebel: Wenn Ja, dann kann die Schleife auch wie gehabt von Null bis Count-1 laufen.
SetLength(Datei,Loc.Count);
|
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
Zitat:
(0, 1) sind auch zwei "Dateien". |
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
Hi,
aber in der StringList wird dann der erste Eintrag übersprungen! Test-Code:
Delphi-Quellcode:
Fazit: Es werden nur 1 und 2 angezeigt.
var
I: Integer; SL: TStringList; begin SL := TStringList.Create; try SL.Add('0'); SL.Add('1'); SL.Add('2'); for I := 1 to SL.Count do begin ShowMessage(SL.Strings[I]); end; finally SL.Free; end; end; Da in der dc.loc Dateien stehen: URL;MD5;Wohin sollte ja auch die erste Datei ausgelesen werden und nicht "vergessen" werden. |
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
Zitat:
|
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
Delphi-Quellcode:
Fazit: Es werden 0, 1 und 2 angezeigt.
var
I: Integer; SL: TStringList; begin SL := TStringList.Create; try SL.Add('0'); SL.Add('1'); SL.Add('2'); for I := 0 to SL.Count-1 do begin ShowMessage(SL.Strings[I]); end; finally SL.Free; end; end; |
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
Count = 5
Schleife von 0 bis Count-1: 0, 1, 2, 3, 4 Das sind bei mir fünf. Ihr müsst auch die null mitzählen! |
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
Hi,
@jbp jupp! Genau das meine ich. Es sollen ja alle (!) Einträge durchlaufen werden und nicht der erste überprungen werden und dann erst durchlaufen ;-) Also, wer hat nun eigentlich recht? [edit] @Luckie mach ich ja [/edit] |
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
Zitat:
|
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
Zitat:
|
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
Zitat:
|
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
Zitat:
|
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
Zitat:
Delphi-Quellcode:
das schreiben:ShowMessage(SL.Strings[I]);
Delphi-Quellcode:
sonst fehlt der Eintrag mit der 0, weil das for... bei 1 anfägt und dadurch nicht der Eintrag mit dem Index 0 angezeigt wird...
ShowMessage(SL.Strings[I - 1]);
Aber ich würds auch mit Count - 1 machen...^^ |
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
Hi,
@der Depp, so könnte man es auch machen. Aber so wie der Quellcode im ersten Beitrag ist, wird schlicht einfach der erste Eintrag übersprungen. @Matze klar! :mrgreen: |
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
toll gemacht spider, applaus *g+
|
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
da in dem Code aus dem ersten Posting gar nicht auf die Items der StringList Loc zugegriffen wird, kann die Schleife eigentlich beliebig laufen, hauptsache sie läuft über genau Loc.Count Schritte.
Das Problem liegt nur in der richtigen Indizierung des dynamischen Array Datei, welches ab 0 indiziert wird. Man könnte also genauso schreiben
Delphi-Quellcode:
for i := 4711 to Loc.Count-4710 do begin
Datei[i-4711] := TDatei.Create; end; ich gebe aber zu, daß man die Schleife normalerweise ab 0 laufen lassen würde .......... :stupid: Roderich |
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
Okok,
ich geb mich geschlagen. Ich hab zwar schon recht, aber es wird ja nicht mehr auf loc zugriffen :wall: sondern nur auf die Zählvariable (wie manch andere schon sagten). :wall: Das ist mir total entfallen^^. Ich sollte doch ma wieder mehr schlafen :-) |
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
Juhuuu hier seht ihr den Sieger :mrgreen:
:party: (Ich weis gar nicht was ihr immer mit euren Strings hattet, darum gehts ja gar nicht :mrgreen:) |
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
ist dieser thread jetzt reine verarsche oder habt ihr das wirklich ernst gemeint???????
|
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
Zitat:
|
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
Zitat:
Es war mein voller ernst. Ich hatte nur nicht gesehen, dass nicht mehr auf Loc zugriffen wurde. |
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
Zitat:
Delphi-Quellcode:
;)
for i := 4711 to Loc.Count+4710 do begin
Datei[i-4711] := TDatei.Create; end; |
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
Dafür wird auf Datei zugegriffen und Datei ist ein Dynamsisches Array das bei 0 beginnt. Also entweder die Schleife von 0 bis Count-1 laufen lassen (was die bessere Möglichkeit ist) oder von 1 bis Count. Dann muss aber immer der Zähler um 1 verringert werden, wenn auf Datei zugegriffen wird. Hier hat keiner Recht oder Unrecht. Fakt ist, so wie im ersten Beitrag gepostet, funktioniert das Programm nicht korrekt. Und wie man es nun löst ist doch völlig egal.
|
Re: for I := 1 to SL.Count do; oder for I := 0 to SL.Count -
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz