Autor Beitrag
DesperadoStrike
Hält's aus hier
Beiträge: 14



BeitragVerfasst: Fr 11.09.09 19:48 
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.
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1054
Erhaltene Danke: 78

Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
BeitragVerfasst: Fr 11.09.09 20:13 
Ehm was für ein Fehler?!?

Probier das hier mal:

ausblenden 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 ;)

_________________
Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
DesperadoStrike Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2077
Erhaltene Danke: 2

Win XP
Delphi 5 Ent., Delphi 2007 Prof
BeitragVerfasst: Fr 11.09.09 20:38 
Dann lass die Schleife halt bis (length(StrArr) div 3) laufen

_________________
PROGRAMMER: A device for converting coffee into software.
DesperadoStrike Threadstarter
Hält's aus hier
Beiträge: 14



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: 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: