Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Schleife (https://www.delphipraxis.net/140339-schleife.html)

kingmarv 16. Sep 2009 10:18


Schleife
 
Hi

Ich führe eine schleife aus um den Inhalt aus einer txt datei in eine combobox1 zufüllen. Die Inhalte der Txt datei sind durch trennzeichen getrennt und ich brauche den Inhalt vor dem ersten trennzeichen.
Komischerweise trägt er immer den gleichen ( den ersten eintrag ) in die combobox obwohl es vom code her eigentlich richtig ist.

Wo ist also der fehler ?

Delphi-Quellcode:
function explode(sPart, sInput: string): ArrOfStr;
begin
  while Pos(sPart, sInput) <> 0 do
  begin
    SetLength(Result, Length(Result) + 1);
    Result[Length(Result) - 1] := Copy(sInput, 0,Pos(sPart, sInput) - 1);
    Delete(sInput, 1,Pos(sPart, sInput));
  end;
  SetLength(Result, Length(Result) + 1);
  Result[Length(Result) - 1] := sInput;
end;
Delphi-Quellcode:
List:=TStringlist.create;
list.loadfromfile('user.txt');
for i:=0 to list.Count-1 do begin

arr:=explode(';',list.strings[i]);
combobox1.Items.add(arr[0]);

end;


Wenn ich diese Zeile rausnehme
Delphi-Quellcode:
arr:=explode(';',list.strings[i]);
und
Delphi-Quellcode:
list.strings[i]
hinzufüge trägt er zwar alles korrekt ein aber nur den ganzen string.


Danke schonmal im vorraus


mFG

himitsu 16. Sep 2009 10:30

Re: Schleife
 
Initialisiere das Ergebnis der Prozedur mal richtig.
Delphi-Quellcode:
function explode(sPart, sInput: string): ArrOfStr;
begin
  Result := nil; // aka SetLength(Result, 0);
  while ...
PS: ArrOfStr
Delphi-Quellcode:
// Unit Types
type TStringDynArray = array of string;

nahpets 16. Sep 2009 10:37

Re: Schleife
 
Hallo,

so ganz habe ich nicht geblickt, was Du da machst, aber wird Arr im Laufe der Schleife nicht immer größer und Arr[0] bleibt immer der erste Eintrag?
Wenn Du immer Arr[0] hinzufügen willst, dann musst Du vor dem Befüllen von Arr auch sicherstellen, dass es leer ist, sonst werden weitere Einträge hinten dran gehangen. Wenn die Routine korrekt arbeitet, müsste doch eigentlich
Delphi-Quellcode:
combobox1.Items.add(arr[i]);
funktionieren? Oder täusche ich mich da?

himitsu dürfte Dir da schon den richtigen Ansatz geliefert haben.

DeddyH 16. Sep 2009 10:44

Re: Schleife
 
Ich verstehe gar nicht, wozu man da Explode braucht, einen einfachen Copy-Befehl kann man doch selbst einbauen.
Delphi-Quellcode:
List:=TStringlist.create;
list.loadfromfile('user.txt');
for i:=0 to list.Count-1 do begin
  combobox1.Items.add(Copy(list[i],1,Pos(';',list[i])-1));
end;
Ungetestet.

kingmarv 16. Sep 2009 13:34

Re: Schleife
 
mit der explode function hat schon so seine richtigkeit

das ist die gleiche function wie aus PHP explode();
Weil in meinen strings verscheidene informationen stehen wie unter anderen vorname nachname
und in arr[0] steht vor+ nachname also mit der 0 stimmt schon.


arr[1] wäre dann der teil vor dem 2ten trennzeichen.

DeddyH 16. Sep 2009 13:41

Re: Schleife
 
Aber wozu ein Array mit zig Elementen, von denen man dann alle außer einem wieder verwirft? Hast Du meinen Code einmal ausprobiert?

nahpets 16. Sep 2009 13:41

Re: Schleife
 
Hallo,
Zitat:

Zitat von kingmarv
mit der explode function hat schon so seine richtigkeit

das ist die gleiche function wie aus PHP explode();
Weil in meinen strings verscheidene informationen stehen wie unter anderen vorname nachname
und in arr[0] steht vor+ nachname also mit der 0 stimmt schon.


arr[1] wäre dann der teil vor dem 2ten trennzeichen.

aber in arr[0] steht doch immer der erste Vor- und Nachname und nicht der aus der list.strings[i], demnach stimmt es doch offensichtlich nicht. Die Routine macht was Anderes als Du meinst, was sie machen würde.

gammatester 16. Sep 2009 14:53

Re: Schleife
 
Diese eine Stelle ist mit Sicherheit falsch:
Delphi-Quellcode:
Result[Length(Result) - 1] := Copy(sInput, 0,Pos(sPart, sInput) - 1);
(Es muß 1 statt 0 heißen). Ich weiß zwar nicht ob, ob das den Fehler beseitig, aber... Aber besser ist auf jeden Fall der Vorschlag von DeddyH.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:26 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