![]() |
Integerwert setzt sich nach for schleife zurück
Moinzen...
irgendwie starr ich hier die ganze zeit auf nen fehlerfreien code und doch klappt es nicht, wie ich es mir vorstelle... kurz dazu gesagt: das ganze ist ein Codegenerator für mein internetcafe system... das ding holt sich ein html template und setzt dabei zufallcodes ein. Wenn man aber nun mehr als eine seite von diesen Codes erstellt, dann hat man praktisch mehrmals die identische seite... ich mache das ganze so.. ich hab ein array das 540 felder hat. ich nehme dann eine for schleife und weise jeden der 540 einen zufallscode zu dann habe ich einen couter der immer eins höher zählt und somit einen anderen code in das leere feld reindrückt... nur setzt sich der counter nach jedem for aufruf der variable seite auf 0 zurück hier ist der code um mir evtl. besser helfen zu können...
Delphi-Quellcode:
MFG
procedure TForm1.generierenClick(Sender: TObject);
var datei, ordner, sect, ag: String; seiten, vorgang1, vorgang2, vorgang3, codeg, counter: Integer; code : array[1..540] of String; begin ordner := '.\codeliste\' + getdate + '-' + gettime; mkdir(pchar(ordner)); counter := 0; tpl.Clear; try tpl.Lines.LoadFromFile('.\code.tpl'); except application.MessageBox('Konnte das Code Template nicht finden!'+#10#13+'Das Programm wird beendet!', 'Fehler!', 16); halt; end; tpl.Text := StringReplace(tpl.Text,'[titel]',kartenname.Text,[rfIgnoreCase]); randomize; for codeg := 1 to 540 do begin code[codeg] := inttostr(random(9)) + inttostr(random(9)) + inttostr(random(9)) + inttostr(random(9)) + inttostr(random(9)) + inttostr(random(9)) + inttostr(random(9)) + inttostr(random(9)); end; for seiten := 1 to anzahl.Value do begin for vorgang1 := 1 to 27 do begin counter := counter + 1; tpl.Text := StringReplace(tpl.Text,'ccfg',code[counter],[rfIgnoreCase]); if st.ItemIndex = 1 then begin sect := 'teeny'; ag := 'ST'; end else begin sect := 'codes'; ag := ''; end; codeini.WriteString(sect, code[counter], inttostr(zeit.Value)); end; for vorgang2 := 1 to 27 do begin tpl.Text := StringReplace(tpl.Text,'[z]',inttostr(zeit.Value)+' Minuten ' + ag,[rfIgnoreCase]); end; for vorgang3 := 1 to 27 do begin tpl.Text := StringReplace(tpl.Text,'krtn',kartenname.Text,[rfIgnoreCase]); end; datei := 'Seite' + inttostr(seiten) + '_' + inttostr(zeit.Value) + 'Min.html'; tpl.Lines.SaveToFile(ordner + '\' + datei); end; application.MessageBox('Codes erfolgreich generiert!', 'Info', 64); shellexecute(0, 'open', pchar(dir + ordner), nil, nil, 1); end; EDIT: Code war unvollständig |
Re: Integerwert setzt sich nach for schleife zurück
wenn ich dich richtig verstehe, musst du "counter" global deklarieren. (und bitte auch initialisieren, im FormCreate-Ereignis z.B.)
|
Re: Integerwert setzt sich nach for schleife zurück
das hab ich auch schon probiert.... nützt auch nix...
|
Re: Integerwert setzt sich nach for schleife zurück
Delphi-Quellcode:
Grüße
begin
ordner := '.\codeliste\' + getdate + '-' + gettime; mkdir(pchar(ordner)); counter := 0; <-- vielleicht diese Zeile entfernen, wenn die Variable global ist Klaus |
Re: Integerwert setzt sich nach for schleife zurück
Randomize sollte man übrigens nur 1 mal beim programmstart aufrufen und nicht immer wieder.
|
Re: Integerwert setzt sich nach for schleife zurück
Du gehst ein geringes aber nicht zu vernachlässigendes Risiko ein, das die 540 codes nicht doch doppelt vorkommen. 8-Stellige Zufallszahlen bekommst Du auch mit dem Mersenne-Twister, und die sind dann garantiert (innerhalb der 540 Codes) eindeutig. Oder Du prüfst. ob einer der Codes nicht schon generiert wurde. Oder (würde ich machen), Du nimmst GUIDs.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:37 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