| Autor |
Beitrag |
Foxhunting
      
Beiträge: 31
WIN XP
Delphi 7 und Bald C++
|
Verfasst: 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
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
Memo1.Lines.LoadFromFile('Starliste NEU.txt'); Zeilen_anz := TStringList.Create; Zeilen_anz.AddStrings(Memo1.Lines); 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); zzName:=Zeilen_anz[LineNumber]; NumberExit:=Zeilen_aus.Count; repeat begin zz_Name:=Zeilen_aus[z]; while zzName = zz_Name do 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'); end; Zeilen_anz.Free; Zeilen_aus.Free; end; |
Moderiert von Narses: Code- durch Delphi-Tags ersetzt
|
|
Sinspin
      
Beiträge: 1340
Erhaltene Danke: 120
Win 10
RIO, CE, Lazarus
|
Verfasst: 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 
      
Beiträge: 31
WIN XP
Delphi 7 und Bald C++
|
Verfasst: 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
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 14.02.08 22:28
Eine TStringList hat auch eine Methode LoadFromFile  .
Du kannst direkt Zeilen_anz.LoadFromFile benutzen.
|
|
Foxhunting 
      
Beiträge: 31
WIN XP
Delphi 7 und Bald C++
|
Verfasst: 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
      
Beiträge: 1098
Erhaltene Danke: 13
Win7 geg. WInXP oder sogar Win98
Rad2007
|
Verfasst: Do 14.02.08 23:36
Sinspin 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 
      
Beiträge: 31
WIN XP
Delphi 7 und Bald C++
|
Verfasst: Do 14.02.08 23:55
Tilo hat folgendes geschrieben: | Sinspin 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
      
Beiträge: 19346
Erhaltene Danke: 1754
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: 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 
      
Beiträge: 31
WIN XP
Delphi 7 und Bald C++
|
Verfasst: 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
      
Beiträge: 708
Win7, Ubuntu 10.10
|
Verfasst: Fr 15.02.08 18:25
Laden - Ändern - Speichern?
|
|
Xion
      

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)
|
Verfasst: 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
      
Beiträge: 1340
Erhaltene Danke: 120
Win 10
RIO, CE, Lazarus
|
Verfasst: 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:
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; Zeilen_anz := TStringList.Create; Zeilen_anz.LoadFromFile('Starliste NEU.txt'); Zeilen_aus := TStringList.Create; Zeilen_aus.LoadFromFile('Wahl.txt'); Memo2.Lines.Clear; Memo2.Lines.AddStrings(Zeilen_aus); for i := 1 to 10 do begin z:=0; LineNumber := Random(Zeilen_anz.Count); zzName:=Zeilen_anz[LineNumber]; NumberExit:=Zeilen_aus.Count; repeat zz_Name:=Zeilen_aus[z]; while zzName = zz_Name do begin LineNumber := Random(Zeilen_anz.Count); zzName:=Zeilen_anz[LineNumber]; end; Inc(z); until z=NumberExit; Memo2.Lines.Add(zzName); end; memo2.Lines.SaveToFile('Wahl.txt'); 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 
      
Beiträge: 31
WIN XP
Delphi 7 und Bald C++
|
Verfasst: 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
      
Beiträge: 1340
Erhaltene Danke: 120
Win 10
RIO, CE, Lazarus
|
Verfasst: Do 21.02.08 12:09
Foxhunting 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?
Foxhunting 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?
|
|