Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Theoretische Informatik » Zeilenumbruch in einer .txt Datei ( Delphi ) » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Zeilenumbruch in einer .txt Datei ( Delphi )
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Andro
Grünschnabel


Dabei seit: 11.02.2017
Beiträge: 9

Zeilenumbruch in einer .txt Datei ( Delphi ) Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Meine Frage:
Hallo
Ich habe folgendes Problem Delphi soll in einer .txt Datei zwei Zeilen hinzufügen
bei meinem ersten Versuch hat Delphi dies auch getan nur als ich die if-Bedingung geändert hatte kam es plötzlich zu keinem Zeilenumbruch mehr in der .txt - Datei.
Damit das Programm allerdings funktioniert benötige ich diesen Zeilenumbruch.
In der Theorie sollte ja ein Zeilenumbruch für jedes list.add('text'); erscheinen.

Meine Ideen:
Mein erster Ansatz, bei dem der Zeilenumbruch erfolgte:
if length(Edit2.Text) >= 6 then
begin
list.LoadFromFile('Logs.txt');
list.add ('Benutzer: '+ nbn);
list.Add('Passwort: '+ npw);
list.SaveToFile('Logs.txt');
showmessage ('Du hast dich erfolgreich angemeldet!');
Button4.Visible := True;
Button3.Enabled := False;
Edit1.Text := '';
Edit2.Text := '';
end

Mein zweiter Ansatz bei dem komischerweise kein Zeilenumbruch erfolgt:

if Label4.Caption = 'Benutzername verfügbar' then
begin
list.LoadFromFile('Logs.txt');
list.add ('Benutzer: '+ nbn);
list.Add('Passwort: '+ npw);
//list.Add('');
list.SaveToFile('Logs.txt');
showmessage ('Du hast dich erfolgreich angemeldet!');
Button4.Visible := True;
Button3.Enabled := False;
Edit1.Text := '';
Edit2.Text := '';
end

// Vielen Dank im vorraus smile

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Andro: 11.02.2017 23:15.

11.02.2017 18:37 Andro ist offline E-Mail an Andro senden Beiträge von Andro suchen Nehmen Sie Andro in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Andro
Grünschnabel


Dabei seit: 11.02.2017
Beiträge: 9

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 ist offline E-Mail an Andro senden Beiträge von Andro suchen Nehmen Sie Andro in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Nein, hast du nicht. Hast du auf "speichern" geklickt?

__________________
Syntax Highlighting fürs Board (Link)
11.02.2017 19:03 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Andro
Grünschnabel


Dabei seit: 11.02.2017
Beiträge: 9

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Ich hatte das falsche Projekt hochgeladen hab es geändert jetzt sollte es richtig sein
11.02.2017 19:08 Andro ist offline E-Mail an Andro senden Beiträge von Andro suchen Nehmen Sie Andro in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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.CreateAugenzwinkern unterbinde, klappt das Anmelden.

So oder so hätte ich noch einiges an deinem Code auszusetzen böse

__________________
Syntax Highlighting fürs Board (Link)
11.02.2017 19:56 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Andro
Grünschnabel


Dabei seit: 11.02.2017
Beiträge: 9

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 Zunge raus
11.02.2017 21:26 Andro ist offline E-Mail an Andro senden Beiträge von Andro suchen Nehmen Sie Andro in Ihre Freundesliste auf
Andro
Grünschnabel


Dabei seit: 11.02.2017
Beiträge: 9

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Also warum bei der .txt Datei kein Zeilensprung erfolgt verstehst du auch nicht ganz?
11.02.2017 22:13 Andro ist offline E-Mail an Andro senden Beiträge von Andro suchen Nehmen Sie Andro in Ihre Freundesliste auf
Andro
Grünschnabel


Dabei seit: 11.02.2017
Beiträge: 9

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

"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

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Andro: 12.02.2017 05:19.

12.02.2017 05:00 Andro ist offline E-Mail an Andro senden Beiträge von Andro suchen Nehmen Sie Andro in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Andro
Grünschnabel


Dabei seit: 11.02.2017
Beiträge: 9

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Achso vielen vielen Dank Gott 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 Forum Kloppe . 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 smile
12.02.2017 14:38 Andro ist offline E-Mail an Andro senden Beiträge von Andro suchen Nehmen Sie Andro in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

Freut mich. Ich hatte schon Angst, dass du das überliest, bei dem vielen Text smile
Und ja, ich wollte auch boolean hinaus.

__________________
Syntax Highlighting fürs Board (Link)
12.02.2017 14:52 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
Informatiker Board » Themengebiete » Theoretische Informatik » Zeilenumbruch in einer .txt Datei ( Delphi )