![]() |
Index von TStringDynArray auswählen
Ich habe da mal wieder eine Frage...:
und zwar trenne ich einen String mit Explode und lasse die einzelnen Strings in einer Listview eintragen. Das funzt auch alles prima. Doch wenn in meiner SQL-Abfrage mehr als ein Datensatz ausgegeben wird, dann werden die Strings zwar getrennt, aber nicht oderntlich eingetragen, da das Array mit allen Datensätzen gefüllt ist und ich es nicht schaffe mit einer Schleife einen Index aus dem Array wählen kann... Hier mal Code:
Delphi-Quellcode:
function Explode(const Separator, S: string; Limit: Integer = 0): TStringDynArray;
var SepLen: Integer; F, P: PChar; ALen, Index: Integer; begin SetLength(Result, 0); if (S = '') or (Limit < 0) then Exit; if Separator = '' then begin SetLength(Result, 1); Result[0] := S; Exit; end; SepLen := Length(Separator); ALen := Limit; SetLength(Result, ALen); Index := 0; P := PChar(S); while P^ <> #0 do begin F := P; P := AnsiStrPos(P, PChar(Separator)); if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then P := StrEnd(F); if Index >= ALen then begin Inc(ALen, 5); SetLength(Result, ALen); end; SetString(Result[Index], F, P - F); Inc(Index); if P^ <> #0 then Inc(P, SepLen); end; if Index < ALen then SetLength(Result, Index); end;
Delphi-Quellcode:
danke im vorraus
ListView1.Clear;
Timer1.Enabled:=True; sl := TStringList.Create; sl.Add('$db_server='+Edit1.Text); sl.Add('$db_name='+Edit2.Text); sl.Add('$db_user='+Edit3.Text); sl.Add('$db_passwort='+Edit4.Text); sl.Add('$Datum='+DateToStr(DateTimePicker1.Date) +','); sl.Add('$Zeit=08:00' +','); sl.Add('$mode=read'); try StrArry := Explode(',', idhttp1.Post('http://xxxxx.com/xxx.php',sl), 0); // Hier müsste doch per Schleife der Index des Arrays ausgewählt werden. Habe mit Array kaum Erfahrung.. ListView1.Items.Add; ListView1.Items[ListView1.Items.Count-1].Caption:=StrArry[0]; with ListView1.Items[ListView1.Items.Count-1].SubItems do begin Add(StrArry[1]); Add(StrArry[2]); Add(StrArry[3]); Add(StrArry[4]); end; sl.Clear; end; except end; |
Re: Index von TStringDynArray auswählen
Delphi-Quellcode:
var
I: Integer; ... for I := 0 to High(StrArry) do begin // AddToListView(StrArry[I]) end; ... |
Re: Index von TStringDynArray auswählen
ja, aber ich habe noch 4 SubItems. Wie bringe ich die unter?
|
Re: Index von TStringDynArray auswählen
Zitat:
|
Re: Index von TStringDynArray auswählen
Also, ich habe in der ListView eine Caption, die aus dem Array mit dem Datum gefüllt wird. Die SubItems Zeit, Person, Wert sollen auch aus dem Array in die ListView eingetragen werden. Und zwar in die SubItems.
|
Re: Index von TStringDynArray auswählen
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var StrArry: TStringDynArray; I: Integer; begin // Anstatt von Explode SetLength(StrArry, 12); StrArry[0] := 'Datum1'; StrArry[1] := 'Zeit1'; StrArry[2] := 'Person1'; StrArry[3] := 'Wert1'; StrArry[4] := 'Datum2'; StrArry[5] := 'Zeit2'; StrArry[6] := 'Person2'; StrArry[7] := 'Wert2'; StrArry[8] := 'Datum3'; StrArry[9] := 'Zeit3'; StrArry[10] := 'Person3'; StrArry[11] := 'Wert3'; // --- I := 0; while I < High(StrArry) do begin with ListView1.Items.Add do begin Caption := StrArry[I]; SubItems.Add(StrArry[I + 1]); SubItems.Add(StrArry[I + 2]); SubItems.Add(StrArry[I + 3]); end; Inc(I, 4); end; end; |
Re: Index von TStringDynArray auswählen
Nein, das geht nicht.
Also mal ganz detailliert: Ich habe eine SQL-DB. Mit meinem Programm rufe ich aus der Tabelle Daten aus den Spalten "Datum, Zeit, Person, Wert" ab. Diese Werte sind durch ein "," getrennt. Der PHP-Script macht die Abfrage und ich bekomme durch idhttp den durch Kommata getrennten Wert zurück.
Delphi-Quellcode:
Dieser wird mit Explode getrennt und in ein dynamisches Array (TStringDynArray) eingetragen. Dann sage ich meinem Programm, er möge die Werte in eine ListView mit SubItems eintragen.
11.11.2004,14:00,A,X
Das funzt auch prima. Doch wenn ich jetzt am 11.11.2004 mehrere Datensätze habe, sagen wir mal zwei, ruft er auch diese zwei ab, da die Abfrage nach Datum geht. Dann habe ich also:
Delphi-Quellcode:
Und hier ist der Knackpunkt! Ich muss also das Array mit den 4 Werten füllen, in die ListView eintragen lassen, das nächste Item aus dem Array wählen und die ListView ergänzen.
11.11.2004,14:00,A,X,11.11.2004,17:20,B,Y
Jetzt ist mir aber gerade eingefallen, dass ich auch, da ich ja immer 4 Werte habe, ein "normales" Array verwende, in das ich die Daten eintrage... Würde das gehen? Ich hoffe, ihr versteht jetzt, was ich meine. Ich komme dabei absolut nicht weiter... :wall: |
Re: Index von TStringDynArray auswählen
Zitat:
|
Re: Index von TStringDynArray auswählen
Ja, aber ich weiß doch nicht, wie viele Datensätze unter dem 11.11.2004 eigetragen sind. Können 2 aber auch 20 sein. Du meinst doch diesen Code, oder?
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var StrArry: TStringDynArray; I: Integer; begin // Anstatt von Explode SetLength(StrArry, 12); StrArry[0] := 'Datum1'; StrArry[1] := 'Zeit1'; StrArry[2] := 'Person1'; StrArry[3] := 'Wert1'; StrArry[4] := 'Datum2'; StrArry[5] := 'Zeit2'; StrArry[6] := 'Person2'; StrArry[7] := 'Wert2'; StrArry[8] := 'Datum3'; StrArry[9] := 'Zeit3'; StrArry[10] := 'Person3'; StrArry[11] := 'Wert3'; // --- I := 0; while I < High(StrArry) do begin with ListView1.Items.Add do begin Caption := StrArry[I]; SubItems.Add(StrArry[I + 1]); SubItems.Add(StrArry[I + 2]); SubItems.Add(StrArry[I + 3]); end; Inc(I, 4); end; end; |
Re: Index von TStringDynArray auswählen
Zitat:
Code:
Soll das Ergebnis in deiner ListView so aussehen?
11.11.2004,14:00,A,X,11.11.2004,17:20,B,Y
Code:
| 11.11.2004 | 14:00 | A | X |
| 11.11.2004 | 17:20 | B | Y | | ... | | | | |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:46 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-2025 by Thomas Breitkreuz