Die letzten 10 Beiträge |
eulerscheZahl |
Freut mich. Ich hatte schon Angst, dass du das überliest, bei dem vielen Text
Und ja, ich wollte auch boolean hinaus. |
Andro |
Achso vielen vielen Dank
es lag tatsächlich daran, dass ich die Liste wieder freigegeben habe. Jetzt funktioniert es ganz normal. Stimmt ich hatte nicht daran gedacht dass kappa negativ negativ oder gleich 0 wird
. Das Label hätte ich am Ende noch invisible gemacht aber ich habe gerade von Boolean gelesen. Ich glaube damit sollte es einfach zu machen sein
|
eulerscheZahl |
Das mit dem Zeilenumbruch kann ich einfach nicht reproduzieren. Bei mir funktioniert es.
Allerdings stürzt dein Programm bei mir ab, wenn ich es so lasse:
code: |
1:
2:
3:
4:
|
list := TStringList.Create;
list.LoadFromFile('Logs.txt');
list.Free;
list.LoadFromFile('Logs.txt'); |
|
Mit Free gibst du den Speicher frei. Danach darfst du die Liste nicht mehr verwenden.
Also entweder nicht freigeben (warum machst du das überhaupt, wenn du die Liste noch verwenden willst?) oder mit list := TStringList.Create; eine neue erstellen.
Könnte sein, dass dein Speicher korrumpiert ist und du deshalb keine Zeilenumbrüche mehr kriegst.
Zitat: |
Jede Zeile von Benutzernamen wird in der .txt Datei kontrolliert und falls es eine Zeile gibt, in der der gewünschte Benutzername bereits existiert wird der Text ('Benutzername bereits vergeben') ausgegeben andernfalls ist der Benutzername verfügbar und die Anmeldung kann erfolgen |
Das ist was du willst. Dein Programm macht etwas anderes.
code: |
1:
2:
3:
4:
5:
6:
7:
|
kappa := list.Count div 2;
for zeilennr := 0 to kappa-1 do
begin
if list[zeilennr*2] = 'Benutzer: '+ nbn then showmessage ('Benutzername bereits vergeben')
else
Label4.Caption := 'Benutzername verfügbar';
end; |
|
Szenario 1: die Liste ist leer. Dann ist kappa=0. Die Schleife läuft von 0 bis -1 (also gar nicht, bis hierhin nicht verkehrt: wo nichts ist, kann nichts getestet werden).
Aber dadruch wird Label4.Caption := 'Benutzername verfügbar'; nie ausgeführt. Das ist aber die Bedingung, um einen neuen Nutzer anzulegen.
if Label4.Caption = 'Benutzername verfügbar' ist false, also kein neuer Nutzer, kein Schreiben in die Datei.
Szenario 2: die Liste hat 2 Nutzer: nutzer1 und nutzer2. nbn ist nutzer1 (der ja schon existiert).
Die Schleife wird zweimal ausgeführt. Beim ersten Mal kommt eine Fehlermeldung (Benutzername bereits vergeben). Beim zweiten Durchlauf ist der Benutzername ein anderer, also wird der else-Pfad ausgeführt. Es wird signalisiert, dass der Name verfügbar ist und ein zweiter nutzer1 wird angehängt.
Wie du beides beheben könntest:
code: |
1:
2:
3:
4:
5:
|
Label4.Caption := 'Benutzername verfügbar';
for zeilennr := 0 to kappa-1 do begin
if list[zeilennr*2] = 'Benutzer: '+ nbn then
Label4.Caption := 'Benutzername vergeben';
end |
|
Für so etwas nimmt man aber eigentlich Variablen, keine Label (da muss jedes Mal die Nutzeroberfläche aktualisiert werden. Bei vielen Nutzern wird das schnell sehr langsam. |
Andro |
"der Nutzername ist verfügbar, wenn es einen Nutzer gibt, der anders heißt. Bei einer leeren Liste kann man sich folglich nicht registrieren."
Nicht ganz nbn ist der von dem Benutzer gewünschte Nutzername.
Jede Zeile von Benutzernamen wird in der .txt Datei kontrolliert und falls es eine Zeile gibt, in der der gewünschte Benutzername bereits existiert wird der Text ('Benutzername bereits vergeben') ausgegeben andernfalls ist der Benutzername verfügbar und die Anmeldung kann erfolgen
Damit aber nur die Zeile der Benutzernamen kontrolliert wird muss zwischen Benutzerzeile und Passwortzeile ein Zeilenumbruch in der .txt Datei erfolgen |
Andro |
Also warum bei der .txt Datei kein Zeilensprung erfolgt verstehst du auch nicht ganz? |
Andro |
Also nach der Registrierung kommt man ja zur Anmeldung und diese gibt einem dann die Ausgabe ob die Anmeldung erfolgreich war oder nicht weiter geht es dann auch nicht.
Ich habe mit Delphi erst am Mittwoch angefangen und bin noch ein anfänger deswegen sieht der code wahrscheinlich nicht so gut aus :/
Das Programm ist ja auch noch nicht fertig ich arbeite mich von Problem zu Problem momentan verstehe ich nicht, warum kein Zeilenumbruch erfolgt
|
eulerscheZahl |
Mein Problem ist, wie ich in den Pfad überhaupt reinkomme.
Das ist ja beim Abschließen des Registrierungsprozesses.
code: |
1:
2:
3:
4:
5:
6:
7:
8:
|
kappa := list.Count div 2;
//...
for zeilennr := 0 to kappa-1 do
begin
if list[zeilennr*2] = 'Benutzer: '+ nbn then showmessage ('Benutzername bereits vergeben')
else
Label4.Caption := 'Benutzername verfügbar';
|
|
der Nutzername ist verfügbar, wenn es einen Nutzer gibt, der anders heißt. Bei einer leeren Liste kann man sich folglich nicht registrieren. Bei zwei verschiedenen Nutzern kann man den verwendeten trotz Meldung nehmen.
Wenn ich also per Texteditor einen Nutzer ergänze, stürzt das Programm beim Versuch des erneuten Ladens ab. (if Label4.Caption = 'Benutzername verfügbar' then [...] list.LoadFromFile('Logs.txt'); )
Wenn ich das Abstürzen durch eine Neuinitialisierung (list := TStringList.Create
unterbinde, klappt das Anmelden.
So oder so hätte ich noch einiges an deinem Code auszusetzen
|
Andro |
Ich hatte das falsche Projekt hochgeladen hab es geändert jetzt sollte es richtig sein |
eulerscheZahl |
Nein, hast du nicht. Hast du auf "speichern" geklickt? |
Andro |
Ja genau deswegen konnte ich es mir auch nicht erklären :/
Danke für die Antwort hab die Datei im Anhang hochgeladen |
Es sind weitere Beiträge zu diesem Thema vorhanden. Klicken Sie hier, um sich alle Beiträge anzusehen. |