![]() |
Feste Positionen in Stringlisten
Guten Morgen zusammen.
ich stehe vor einem Problem, vielleicht könnt ihr mir ja weiter helfen. Ich habe ein Stringliste, die ich mit z.B. 16 Teilnehmer füll, sind aber nur 13 Teilnehmer vorhanden, so brauche ich sogenannte "Freilose", die aber an festen positionen stehen müssen. ich habe das jetzt so gemacht :
Delphi-Quellcode:
Gibt es noch einen andere möglichkeit, dies zu bewerkstelligen ??
procedure TForm1.Button1Click(Sender: TObject);
var a : TStringList; i, j : integer; begin a := tStringList.Create; case StrToInt(edit1.Text) of 1 : begin for i := 0 to 15 do a.Add('Tester ' + IntToStr(i)); a.Add('Freilos'); a.Exchange(16, 1); end; 4 : begin for i := 0 to 11 do a.Add('Tester ' + IntToStr(i)); for j := 1 to 4 do a.Insert(11 + j, 'Freilos'); a.Exchange(15, 1); a.Exchange(14, 9); a.Exchange(13, 5); a.Exchange(12, 13); end; end; memo1.Lines := a; end; Grüße Christian |
Re: Feste Positionen in Stringlisten
a.Insert() ?
|
Re: Feste Positionen in Stringlisten
Mein Problem ist folgendes. Es sind maximal 16 Teilnehmer, sind weniger Teilnehmer vorhanden müssen Freilose gesetzt werden, die aber an bestimmten Postionen stehen müssen.
Das Programm wird zu einem späteren Zeitpunkt erweitert, d.h. das dann z.b. 64 Teilnehmer vorhanden sind. Beispiel : Teilnehmer 38 (benötigtes System 64er) Freilose 26 (es sind bis zu 29 Freilose möglich) Das heißt :
Delphi-Quellcode:
Es würde dann einen ziemlich langen quellcode geben.
case aFreilose of
0 : begin for i := 1 to aTeilnehmer do aStringListe.Add('Teilnehmer ' + IntToStr(i)); end; 1 : begin for i := 1 to aTeilnehmer do aStringListe.Add('Teilnehmer ' + IntToStr(i)); aStringListe.Add('Freilos'); aStringListe.ExChange(Letzte Position, 1) end; 2 : begin end; .. .. 26 : begin for i := 1 to aTeilnehmer do aStringListe.Add('Teilnehmer ' + IntToStr(i)); for j := 1 to 26 do aStringListe.Insert(Letzte Position + j, 'Freilos'); aStringListe.ExChange(Letzte Position, 1); aStringListe.ExChange(Letzte Position - 1 , 10); usw. bis alles Freilose positioniert sind end; .. .. 29 : begin end; end; Ich hoffe, daß dieses Beispiel besser ist, welches mein Problem dastellt. Danke für deine Antwort. |
Re: Feste Positionen in Stringlisten
Hallo,
ich verstehe Deine Aufgabenstellung nicht ganz: 13 Teilnehmer, 16 Plätze, Freilose = 16 - 13 = 3. 38 Teilnehmer, 64 Plätze, Freilose = 64 - 38 = 26. 53 Teilnehmer, 64 Plätze, Freilose = 64 - 53 = 11. Und Du benötigst jetzt eine Regel, mit der Du die variable Anzahl von Freilosen mit wenig Programmieraufwand verteilen kannst. Wie ist genau die Regel der Freilosverteilung?
Delphi-Quellcode:
Könntest Du das bitte etwas allgemeiner beschreiben?
aStringListe.ExChange(Letzte Position, 1);
aStringListe.ExChange(Letzte Position - 1 , 10); usw. bis alles Freilose positioniert sind Müssen die Freilose in bestimmten Abständen eingefügt werden oder immer an Position 1, 10, 20, 30, ichweißnichwas? Im ersten Beispiel von Dir sind vier Freilose an den Positionen 1, 5, 9 und 13, d. h. 1 ist immer Freilos (sofern es Freilose gibt) und dann jeweils von dort aus
Code:
wird ein Freilos?
Position := (Plätze DIV Freilos)
Das müsste sich per Schleife und Insert allgemeingültig realisieren lassen. |
Re: Feste Positionen in Stringlisten
Mal als Anregung:
Delphi-Quellcode:
Das muss sicher noch etwas ausgefeilt werden, aber sollte gehen.
const
CMax = 10; //Gesamtanzahl der Plätze CUser = 6; //Anzahl der derzeitigen Teilnehmer CFixed = [1,3,5,7]; //Hier stehen die festen Positionen var i: Integer; begin //Regulären Teilnehmer einfügen for i := 1 to CUser do lb.Items.Add('Teilnehmer: ' + IntToStr(i)); //Feste Positionen einfügen for i := 1 to CMax do if (lb.Count < CMax) and (i in CFixed) then lb.Items.Insert(i - 1,'Freilos'); end; |
Re: Feste Positionen in Stringlisten
Danke für deine Anregung. Werde es am Wochenende mal Testen, und ausbauen.
Vielen Dank und ein schönes Wochenende |
Re: Feste Positionen in Stringlisten
Eine etwas abgewandelte Version, die die gesamte Liste in einem Durchlauf füllt:
Delphi-Quellcode:
var
i, FixedReq: Integer; begin FixedReq := CMax - CUser; //Anzahl der benötigten Festplätze for i := 1 to CMax do begin if (FixedReq > 0) and (i in CFixed) then begin lb.Items.Add('Freilos'); //Festplatz einfügen Dec(FixedReq); //Ein Festplatz weniger wird benötigt end else begin lb.Items.Add('Teilnehmer'); //Teilnehmer einfügen end; end; end; |
Re: Feste Positionen in Stringlisten
Danke, Ihr wart mir eine große Hilfe.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:32 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