AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schleife

Ein Thema von kingmarv · begonnen am 16. Sep 2009 · letzter Beitrag vom 16. Sep 2009
Antwort Antwort
kingmarv

Registriert seit: 25. Aug 2009
14 Beiträge
 
#1

Schleife

  Alt 16. Sep 2009, 11:18
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 arr:=explode(';',list.strings[i]); und list.strings[i] hinzufüge trägt er zwar alles korrekt ein aber nur den ganzen string.


Danke schonmal im vorraus


mFG
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.079 Beiträge
 
Delphi 12 Athens
 
#2

Re: Schleife

  Alt 16. Sep 2009, 11:30
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;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

Re: Schleife

  Alt 16. Sep 2009, 11:37
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 combobox1.Items.add(arr[i]); funktionieren? Oder täusche ich mich da?

himitsu dürfte Dir da schon den richtigen Ansatz geliefert haben.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#4

Re: Schleife

  Alt 16. Sep 2009, 11:44
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
kingmarv

Registriert seit: 25. Aug 2009
14 Beiträge
 
#5

Re: Schleife

  Alt 16. Sep 2009, 14:34
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.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.624 Beiträge
 
Delphi 12 Athens
 
#6

Re: Schleife

  Alt 16. Sep 2009, 14:41
Aber wozu ein Array mit zig Elementen, von denen man dann alle außer einem wieder verwirft? Hast Du meinen Code einmal ausprobiert?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#7

Re: Schleife

  Alt 16. Sep 2009, 14:41
Hallo,
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.
  Mit Zitat antworten Zitat
gammatester

Registriert seit: 6. Dez 2005
999 Beiträge
 
#8

Re: Schleife

  Alt 16. Sep 2009, 15:53
Diese eine Stelle ist mit Sicherheit falsch:
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.
  Mit Zitat antworten Zitat
Antwort Antwort


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 22:12 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