Autor Beitrag
Foxhunting
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 31

WIN XP
Delphi 7 und Bald C++
BeitragVerfasst: Mo 11.02.08 21:08 
Tach alle zusammen!

Habe mit meinem Programm Misswahl noch ein Problem. Wenn ich das Programm ausführe und überprüfe lasse ob der gezogene Eintrag schon in der Liste ist. Das ist ja in Ordnung aber wenn ich das Programm neu starte dann fängt er eine neue Liste an mit den gezognen soll aber die alte nehmen!!!

Hier der Quellcode für das Programm


ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
var
  i,z, LineNumber, NumberExit: Integer;
  Zeilen_anz, Zeilen_aus: TStringList;
  zzName, zz_Name:string;
begin

  //Startlist.txt einlesen
  Memo1.Lines.LoadFromFile('Starliste NEU.txt');
  Zeilen_anz := TStringList.Create;
  Zeilen_anz.AddStrings(Memo1.Lines);
  //Wahl.txt einlesen
  Memo3.Lines.LoadFromFile('Wahl.txt');
  Zeilen_aus := TStringList.Create;
  Zeilen_aus.AddStrings(Memo3.Lines);
  z:=0;
  for i := 1 to 10 do
  begin
    randomize;
    z:=0;
      LineNumber := Random(Zeilen_anz.Count);  //ziehen der Zufalls zahl (länge der liste)
      zzName:=Zeilen_anz[LineNumber]; //die ziel in den str zzName lesen
      NumberExit:=Zeilen_aus.Count; //Ende der wahlliste in numberExit wandeln
   repeat
   begin
      zz_Name:=Zeilen_aus[z]; //sie zeile [1] in zz_Name lesen
      while  zzName = zz_Name do   //ist zzName = zz_Name
      begin
        LineNumber := Random(Zeilen_anz.Count);
        zzName:=Zeilen_anz[LineNumber];
      end;
      z:=z+1;
    end;
    until z=NumberExit;
   Memo2.Lines.Add(zzName);
   memo2.Lines.SaveToFile('Wahl.txt');
   //Memo3.Lines.LoadFromFile('Wahl.txt');
   //Zeilen_aus.AddStrings(Memo3.Lines);
  end;
  Zeilen_anz.Free;
  Zeilen_aus.Free;
end;


Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1340
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mo 11.02.08 21:50 
1. Randomize ruft man nur EINMAL auf. Auf deine Art bekommst du immer wieder die gleiche Zufallszahl (eine Sekunde lang)
2. Warum der umweg über Memos beim laden der Dateien?
3. Seit wann braucht man bei einer Repeat Until Schleife begin und end?
4. Weil du in Zeile 35 (in der Schleife) speicherst?

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Foxhunting Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 31

WIN XP
Delphi 7 und Bald C++
BeitragVerfasst: Do 14.02.08 22:21 
also stimmt habe begin und end raus genommen!! Aber was mache ich nun, wenn ich das in der schleife Speicher. Eine Idee?? Das mit den Memos weil ich es anders nicht hin bekommen habe. Bin für gute Ideen immer offen und so. Weil alles andere was erklärt wurde war sehr hoch und so.

Also bei gute Ideen her damit.
Mfg Foxhunting
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Do 14.02.08 22:28 
Eine TStringList hat auch eine Methode LoadFromFile ;-).
Du kannst direkt Zeilen_anz.LoadFromFile benutzen.
Foxhunting Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 31

WIN XP
Delphi 7 und Bald C++
BeitragVerfasst: Do 14.02.08 23:31 
Ja OK aber wie mache ich das mit dem Speichern weil ich ja das Problem haben wenn er speichert dann immer eine Neue Datei anfängt. Also die Alte Datei mit den Daten der vorhergehenden Ziehung leert!!
Das ist ja das Problem aber das mit den LoadFromFile kann ich ja mal versuchen.
Tilo
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 1098
Erhaltene Danke: 13

Win7 geg. WInXP oder sogar Win98
Rad2007
BeitragVerfasst: Do 14.02.08 23:36 
user profile iconSinspin hat folgendes geschrieben:

4. Weil du in Zeile 35 (in der Schleife) speicherst?


Da wird nunmal die Alte datei überschrieben.
Kommentier die betreffende Zeile aus und die Datei wird nicht verändert!
Foxhunting Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 31

WIN XP
Delphi 7 und Bald C++
BeitragVerfasst: Do 14.02.08 23:55 
user profile iconTilo hat folgendes geschrieben:
user profile iconSinspin hat folgendes geschrieben:

4. Weil du in Zeile 35 (in der Schleife) speicherst?


Da wird nunmal die Alte datei überschrieben.
Kommentier die betreffende Zeile aus und die Datei wird nicht verändert!


JA und dann?? Es soll ja gespeichert werden. aber immer fortlaufend und nicht immer neu!!
Das ist ja das Problem wenn ich die Auskommentiere dann beleibt der Daten wert erhalten der in der Datei steht!!!!!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 15.02.08 00:00 
Es gibt nur zwei Möglichkeiten, entweder bleibt der Inhalt der Datei erhalten oder nicht, aber beides scheint nicht das zu sein, was du möchtest?
Ich verstehe nicht, was eigentlich mit der Datei passieren soll...
Foxhunting Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 31

WIN XP
Delphi 7 und Bald C++
BeitragVerfasst: Fr 15.02.08 18:16 
Also OK ich versuche es noch mal zu erklären!!

Ich habe ein Programm (Misswahl) wo ich aus ein liste mit Namen. 10 Namen mir raus zeihen lasse. die Namen will ich speichern in einer Datei. Das geht ja alles noch. Und dann wenn ich das Programm neu öffne dann soll er die in der Datei schon stehen nach mal zum Überprüfen nehmen. Aber dann weiter schreiben und nicht neu anfangen. Das dann nach dem 2. Mal schon 20 Namen drin stehen!!

Noch Fragen??

Und dann wenn ich die Zeile 35 auskommentiere dann ist der befehl für das Speichern weg. des wegen kann es ja nicht funktionieren.

Noch Ideen??

Mfg Foxhunting
nagel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 708

Win7, Ubuntu 10.10

BeitragVerfasst: Fr 15.02.08 18:25 
Laden - Ändern - Speichern?
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: So 17.02.08 09:47 
irgendwie verwirrend, dein Code ^^

am Anfang würde ich noch ein Memo2.Lines.Clear; einfügen

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1340
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Di 19.02.08 16:29 
Du möchtest also das Wahl.txt un weitere Einträge erweitert wird?
Ich denke einfach mal *laut*:
- Dann musst du auch dafür sorgen das in der Datei alle Einträge landen.
- memo2 ist undefiniert. Es müsste also initialisiert werden (memo2.Lines.Clear).
- Du verwendest memo2 um die neue Liste zu erstellen und zu speichern?
- Dann müssen da auch beim speichern schon alle vorhanden mit drinne sein.
- Also : memo2.Lines.AddStrings(Memo3.Lines).
- jetzt führst du deine Auswahl durch. (Zeile 34 bleibt erhalten),
- Zeile 35 sollte da weg.
--> Es ist besser wenn du das nur einmal machst. Und zwar NACH der Schleife!
--> Also in Zeile 39 verschieben.
- und jetzt schreibe ich es doch:

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
var
  i,z, LineNumber, NumberExit: Integer;
  Zeilen_anz, Zeilen_aus: TStringList;
  zzName, zz_Name:string;
begin
  randomize; // nur einmal! besser nur einmal im programm

  // nur memo oder StringListen, alles anderen ist gaga!
  //Startlist.txt einlesen
  Zeilen_anz := TStringList.Create;
  Zeilen_anz.LoadFromFile('Starliste NEU.txt');
  //Wahl.txt einlesen
  Zeilen_aus := TStringList.Create;
  Zeilen_aus.LoadFromFile('Wahl.txt');
  Memo2.Lines.Clear; // Liste leeren
  Memo2.Lines.AddStrings(Zeilen_aus); // bisherige Miss't Liste schonmal in den Ausgang
  //z:=0; <-- überflüssig
  for i := 1 to 10 do
  begin
     z:=0;
     LineNumber := Random(Zeilen_anz.Count);  //ziehen der Zufalls zahl (länge der liste)
     zzName:=Zeilen_anz[LineNumber]; //die ziel in den str zzName lesen
     NumberExit:=Zeilen_aus.Count; //Ende der wahlliste in numberExit wandeln
     repeat
       zz_Name:=Zeilen_aus[z]; //sie zeile [1] in zz_Name lesen
       while zzName = zz_Name do   //ist zzName = zz_Name
       begin
         LineNumber := Random(Zeilen_anz.Count);
         zzName:=Zeilen_anz[LineNumber];
       end;
       //z:=z+1;
       Inc(z); // <-- besser als : z:=z+1;
     until z=NumberExit;
     Memo2.Lines.Add(zzName);
     //memo2.Lines.SaveToFile('Wahl.txt'); <--- weg damit!
     //Memo3.Lines.LoadFromFile('Wahl.txt');
     //Zeilen_aus.AddStrings(Memo3.Lines);
  end;
  // alte + NEUE speichern
  memo2.Lines.SaveToFile('Wahl.txt'); // und hier hin!
  Zeilen_anz.Free;
  Zeilen_aus.Free;
end;

Ich hoffe mal das ich den Nerv getroffen habe.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
Foxhunting Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 31

WIN XP
Delphi 7 und Bald C++
BeitragVerfasst: Mi 20.02.08 21:38 
das klingt ja alles schon mal gut. werde das morgen mal versuchen. aber kann es sein das er mir dann immer die wahl.txt aus gibt und daraus die zufalls namen zieht??

Aber Danke erst mal für die mühe!!!!

Danke
Mfg Foxhunter
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1340
Erhaltene Danke: 120

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Do 21.02.08 12:09 
user profile iconFoxhunting hat folgendes geschrieben:

das klingt ja alles schon mal gut. werde das morgen mal versuchen. aber kann es sein das er mir dann immer die wahl.txt aus gibt und daraus die zufalls namen zieht??

Hm, irgendwie komme ich jetzt nicht ganz mit, genau das wolltest du doch?

user profile iconFoxhunting hat folgendes geschrieben:

... Und dann wenn ich das Programm neu öffne dann soll er die in der Datei schon stehen nach mal zum Überprüfen nehmen. Aber dann weiter schreiben und nicht neu anfangen. Das dann nach dem 2. Mal schon 20 Namen drin stehen!!

Steht das da nicht?

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?