Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Index von TStringDynArray auswählen (https://www.delphipraxis.net/33611-index-von-tstringdynarray-auswaehlen.html)

TheMiller 9. Nov 2004 22:11


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:
  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;
danke im vorraus

Sprint 9. Nov 2004 22:19

Re: Index von TStringDynArray auswählen
 
Delphi-Quellcode:
var
  I: Integer;

  ...

  for I := 0 to High(StrArry) do
  begin
    // AddToListView(StrArry[I])
  end;

  ...

TheMiller 9. Nov 2004 22:21

Re: Index von TStringDynArray auswählen
 
ja, aber ich habe noch 4 SubItems. Wie bringe ich die unter?

Sprint 9. Nov 2004 22:24

Re: Index von TStringDynArray auswählen
 
Zitat:

Zitat von DJ-SPM
ja, aber ich habe noch 4 SubItems. Wie bringe ich die unter?

Ich verstehe deine Frage irgendwie nicht.

TheMiller 9. Nov 2004 22:28

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.

Sprint 9. Nov 2004 23:01

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;

TheMiller 10. Nov 2004 15:26

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:
11.11.2004,14:00,A,X
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.

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:
11.11.2004,14:00,A,X,11.11.2004,17:20,B,Y
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.

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:

Sprint 10. Nov 2004 16:31

Re: Index von TStringDynArray auswählen
 
Zitat:

Zitat von DJ-SPM
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.

Geht doch so wie ich es geschrieben habe.

TheMiller 10. Nov 2004 16:35

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;

Sprint 10. Nov 2004 16:48

Re: Index von TStringDynArray auswählen
 
Zitat:

Zitat von DJ-SPM
Ja, aber ich weiß doch nicht, wie viele Datensätze unter dem 11.11.2004 eigetragen sind. Können 2 aber auch 20 sein.

Wenn das deine Daten sind ...
Code:
11.11.2004,14:00,A,X,11.11.2004,17:20,B,Y
Soll das Ergebnis in deiner ListView so aussehen?
Code:
| 11.11.2004 | 14:00 | A | X |
| 11.11.2004 | 17:20 | B | Y |
| ...       |       |   |   |


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:36 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz