Zeilenumbruch in einer .txt Datei ( Delphi ) |
Andro
Grünschnabel
Dabei seit: 11.02.2017
Beiträge: 9
|
|
|
11.02.2017 18:37 |
|
|
|
Da hat sich ja nur die Bedingung am Anfang geändert. Bei deinem Codeausschnitt kann ich mir das nicht erklären.
Zitat: |
Call SaveToFile to save the strings in the list to the file specified by FileName. Each string in the list is written to a separate line in the file. |
(Doku)
Wenn du willst, kannst du dein komplettes Projekt als .zip in den Anhang. Bei deinem Ausschnitt kann ich nichts finden.
__________________ Syntax Highlighting fürs Board (Link)
|
|
11.02.2017 18:55 |
|
|
Andro
Grünschnabel
Dabei seit: 11.02.2017
Beiträge: 9
|
|
Ja genau deswegen konnte ich es mir auch nicht erklären :/
Danke für die Antwort hab die Datei im Anhang hochgeladen
|
|
11.02.2017 19:03 |
|
|
Andro
Grünschnabel
Dabei seit: 11.02.2017
Beiträge: 9
|
|
Ich hatte das falsche Projekt hochgeladen hab es geändert jetzt sollte es richtig sein
|
|
11.02.2017 19:08 |
|
|
|
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
__________________ Syntax Highlighting fürs Board (Link)
|
|
11.02.2017 19:56 |
|
|
Andro
Grünschnabel
Dabei seit: 11.02.2017
Beiträge: 9
|
|
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
|
|
11.02.2017 21:26 |
|
|
Andro
Grünschnabel
Dabei seit: 11.02.2017
Beiträge: 9
|
|
Also warum bei der .txt Datei kein Zeilensprung erfolgt verstehst du auch nicht ganz?
|
|
11.02.2017 22:13 |
|
|
|
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.
__________________ Syntax Highlighting fürs Board (Link)
Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von eulerscheZahl: 12.02.2017 07:34.
|
|
12.02.2017 07:32 |
|
|
Andro
Grünschnabel
Dabei seit: 11.02.2017
Beiträge: 9
|
|
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
|
|
12.02.2017 14:38 |
|
|
|