Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Schleife programmieren


DesperadoStrike - Fr 11.09.09 19:48
Titel: Schleife programmieren
Hallo, mich plagt zurzeit ein kleines bisschen Quellcode. Ich lade Daten von einer Webseite, zerteile sie mit der Explode Funktion und bekomme am Ende 18 Einzelstrings heraus. Das Schema ist immer gleich: 0 = Name | 1 = Author | 2 = Datum | 3 = Name | 4 = Author usw

Das ganze wird zurzeit in einer Listview verwaltet.

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
LI := Maplist.Items.Add;
  LI.Caption :=   StrArr[0];
  LI.SubItems.Add(StrArr[1]);
  LI.SubItems.Add(StrArr[2]);

  LI := Maplist.Items.Add;
  LI.Caption :=   StrArr[3];
  LI.SubItems.Add(StrArr[4]);
  LI.SubItems.Add(StrArr[5]);

  LI := Maplist.Items.Add;
  LI.Caption :=   StrArr[6];
  LI.SubItems.Add(StrArr[7]);
  LI.SubItems.Add(StrArr[8]);

  LI := Maplist.Items.Add;
  LI.Caption :=   StrArr[9];
  LI.SubItems.Add(StrArr[10]);
  LI.SubItems.Add(StrArr[11]);

  LI := Maplist.Items.Add;
  LI.Caption :=   StrArr[12];
  LI.SubItems.Add(StrArr[13]);
  LI.SubItems.Add(StrArr[14]);

  LI := Maplist.Items.Add;
  LI.Caption :=   StrArr[15];
  LI.SubItems.Add(StrArr[16]);
  LI.SubItems.Add(StrArr[17]);


Es sind also 6 Einträge mit je 3 Spalten = 18 Strings.

Aber ich will nicht für jeden Eintrag in meinem Programm eigenen Code machen. Ich wollte es zuerst mit repeat und until machen, aber leider stand ich vor dem Problem das LI.Caption nicht '' zurückgibt wenn man bei StrArr[18] ankommt.

Gibt es da eine gute Lösung?

Moderiert von user profile iconNarses: Quote- durch Delphi-Tags ersetzt


platzwart - Fr 11.09.09 20:13

Ehm was für ein Fehler?!?

Probier das hier mal:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
For i:=0 to 5 do
 begin
  LI:= Maplist.Items.Add;
  LI.Caption:= StrArr[i*3];
  LI.SubItems.Add(StrArr[i*3+1]);
  LI.SubItems.Add(StrArr[i*3+2]); 
 end;


Edit: Ok, habe dein Problem nun verstanden. Du hast ja auch 18 Elemente, 0-17. Weil du bei null anfängst zu zählen, hast du "obere Grenze plus eins" = "17+1" Elemente ;)


DesperadoStrike - Fr 11.09.09 20:34

Das ganze wird ja über eine Webseite abgewickelt. Wenn die Webseite erweitert wird mit z.b. einem Eintrag ( 3 Strings ) mehr, dann soll das Programm ja auch ohne Update das ganze übernehmen. Daher kann ich keine festen Werte einbauen. Er soll einfach solange StrArr hochzählen bis nichtsmehr kommt. Das würde ja sogar in der Theorie gehen, aber im F7 Modus wird sichtbar, das StrArr nicht '' also Leer zurück gibt wenn es auf 18 kommt, sondern einfach nur Inkompatibler Wert. Da liegt das ganze Problem


Xentar - Fr 11.09.09 20:38

Dann lass die Schleife halt bis (length(StrArr) div 3) laufen


DesperadoStrike - Fr 18.09.09 20:45

Das Problem bei der ersten Schleife ist wieder das, das ich vorher nicht weiß wieviele Datensätze ankommen.
Das Programm stürzt zwar nicht ab, aber die Listbox wird endlos lang wenn ich z.b. 99 benutze. Ausserdem bekomme ich einen 404 Error wenn ich einen leeren Eintrag anklicke. Habe mir schon überlegt einfach die Anzahl der Maps als erstes Hinzuschreiben in die Datei. Aber dann Stimmt die ganze Schleife nichtmehr und ich muss immer wenn ich etwas hinzufügen will die Zahl ändern. Gibts da was einfacheres?

Das Problem bei der zweiten Methode ist, das die Strings nicht alle gleichlang sind.


jaenicke - Sa 19.09.09 04:05

StrArr ist doch wohl ein Array, das nur die Einträge enthält, oder? Also in diesem Fall dann die Einträge 0..17 hat, oder?

Dann kannst du doch user profile iconXentars Vorschlag 1:1 übernehmen. :gruebel: