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
Narses: 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
Xentars Vorschlag 1:1 übernehmen. :gruebel:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!