Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

11.06.2015, 00:30

Leere Strings aus Datei entfernen

Hallo liebe Community,

und zwar bin ich wieder an ein Problem gestoßen.


Hier wird ein Profil in einer Textdatei gespeichert:

C-/C++-Quelltext

1
2
3
    datei.open("Profile.txt", ios_base::app);
    datei << sProfil << endl;
    datei.close();


So sollte bzw. sieht die Textdatei aus:
Profilname1
Profilname2
Profilname3
usw.


Hier werden die Profile wieder aus der Datei gelesen und ausgegeben:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
    string profile;
    ifstream datei("Profile.txt");

    cout << "Wähle aus einem der folgenden Profile. " << endl;

    if (datei.is_open()){
        while (datei.good()){
            getline(datei, profile);
                cout << "Profil: " << profile << endl;      
        }
    }

    datei.close();


Doch die Ausgabe in der Konsole sieht dann so aus:

Profil: Profilname1
Profil: Profilname2
Profil: Profilname3
Profil: (leer)

Die leere Zeile am Ende wird anscheinend mit ausgegeben und das soll nicht passieren.


mfg
peacewalker

2

11.06.2015, 00:38

naja, du könntest halt entweder das endl beim letzten Eintrag weglassen oder beim ausgeben überprüfen, ob die Zeile leer ist. Ich würde vermutlich letzteres machen, so werden dann alle Einträge mit einem Zeilenumbruch abgeschlossen.
Lieber dumm fragen, als dumm bleiben!

3

11.06.2015, 00:45

Das endl weglassen, habe ich schon probiert, aber da werden die Profile so gespeichert:

Profilname1Profilname2Profilname3..

Also würde ich gerne auch letzteres versuchen.
Kannst du mir bitte eventuell erläutern wie das Überprüfen funktioniert?


mfg
peacewalker

4

11.06.2015, 01:18

Habe es mittlerweile dank deines Tipps lösen können:

C-/C++-Quelltext

1
2
3
4
5
6
7
    if (datei.is_open()){
        while (datei.good()){
            getline(datei, profile);
            if (!profile.empty())
                cout << "Profil: " << profile << endl;      
        }
    }


Danke dir.

mfg
peacewalker

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

5

11.06.2015, 15:32

Du hast die 1. Variante falsch verstanden. Du sollst den Zeilenumbruch nicht gänzlich weglassen, sondern nur für den letzten Eintrag.
Was man verwendet ist eine Sache der Philosophie. Entweder betrachtet man einen Zeilenumbruch als das Ende einer Zeile (weshalb auf jede ein Zeilenumbruch folgen muss), oder der Zeilenumbruch grenzt 2 Zeilen voneinander ab. Ich würde ein Beenden präferieren, da das auch die Interpretation beim HTTP-Protokoll ist ("Leerzeile" heißt in dem Fall, dass ein weiterer Zeilenumbruch erwartet wird).
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

6

11.06.2015, 16:41

Du meinst also ich soll mit einer if-Anweisung fragen ob es die letzte Zeile ist.
Wenn es der Fall ist, dann soll das endl weggelassen werden. Habe ich es richtig verstanden?

mfg
peacewalker

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

7

11.06.2015, 16:48

Das war die andere Option, die Jonathan vorschlug. Ich habe nicht geschrieben, dass du das so machen solltest, ich wollte nur, dass die die Optionen in richtiger Form bekannt sind.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

8

11.06.2015, 16:56

Mir ist bewusst wie du es gemeint hast.
Ich wollte nur sicher gehen, dass ich dich richtig verstanden habe.

Danke dir für die Aufklärung.

mfg
peacewalker

9

11.06.2015, 22:37

Mir ist bewusst wie du es gemeint hast.
Ich wollte nur sicher gehen, dass ich dich richtig verstanden habe.


Jup, haste. War auch keine schlechte Idee, nochmal nachzufragen, am Anfang ist halt alles sehr verwirrend und man versteht es leicht falsch. Aber mit etwas Übung, wird man schnell besser (+ man kann die Antworten und Hinweise anderer besser interpretieren). Nur weiter so!
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige