AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Index von TStringDynArray auswählen

Index von TStringDynArray auswählen

Ein Thema von TheMiller · begonnen am 9. Nov 2004 · letzter Beitrag vom 11. Nov 2004
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#1

Index von TStringDynArray auswählen

  Alt 9. Nov 2004, 22:11
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
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#2

Re: Index von TStringDynArray auswählen

  Alt 9. Nov 2004, 22:19
Delphi-Quellcode:
var
  I: Integer;

  ...

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

  ...
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#3

Re: Index von TStringDynArray auswählen

  Alt 9. Nov 2004, 22:21
ja, aber ich habe noch 4 SubItems. Wie bringe ich die unter?
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#4

Re: Index von TStringDynArray auswählen

  Alt 9. Nov 2004, 22:24
Zitat von DJ-SPM:
ja, aber ich habe noch 4 SubItems. Wie bringe ich die unter?
Ich verstehe deine Frage irgendwie nicht.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#5

Re: Index von TStringDynArray auswählen

  Alt 9. Nov 2004, 22:28
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#6

Re: Index von TStringDynArray auswählen

  Alt 9. Nov 2004, 23:01
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;
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#7

Re: Index von TStringDynArray auswählen

  Alt 10. Nov 2004, 15:26
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.

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:

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...
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#8

Re: Index von TStringDynArray auswählen

  Alt 10. Nov 2004, 16:31
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.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Benutzerbild von TheMiller
TheMiller

Registriert seit: 19. Mai 2003
Ort: Gründau
2.480 Beiträge
 
Delphi XE7 Architect
 
#9

Re: Index von TStringDynArray auswählen

  Alt 10. Nov 2004, 16:35
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;
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#10

Re: Index von TStringDynArray auswählen

  Alt 10. Nov 2004, 16:48
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 |
| ...       |       |   |   |
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:59 Uhr.
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