Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Integerwert setzt sich nach for schleife zurück (https://www.delphipraxis.net/86472-integerwert-setzt-sich-nach-schleife-zurueck.html)

delphis spassbremse 14. Feb 2007 16:42


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:
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;
MFG

EDIT: Code war unvollständig

DGL-luke 14. Feb 2007 16:52

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.)

delphis spassbremse 14. Feb 2007 16:58

Re: Integerwert setzt sich nach for schleife zurück
 
das hab ich auch schon probiert.... nützt auch nix...

Klaus01 14. Feb 2007 20:58

Re: Integerwert setzt sich nach for schleife zurück
 
Delphi-Quellcode:
begin
  ordner := '.\codeliste\' + getdate + '-' + gettime;
  mkdir(pchar(ordner));

  counter := 0; <-- vielleicht diese Zeile entfernen, wenn die Variable global ist
Grüße
Klaus

SirThornberry 14. Feb 2007 21:03

Re: Integerwert setzt sich nach for schleife zurück
 
Randomize sollte man übrigens nur 1 mal beim programmstart aufrufen und nicht immer wieder.

alzaimar 14. Feb 2007 21:28

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 20:57 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