Seite 1 von 1

'\n' Problem :/

Verfasst: So Okt 23, 2011 1:22 pm
von Kmitska
Hallo!
Erstelle gerade eine Funktion, die paar Sachen zum Text einfügen soll und dabei neue Zeile anfangen soll.

Code: Alles auswählen

void YSet(char FileName[], char ValueName[], char Value[])
{
    using namespace std;
    int lines;
    string line;
    string content;
    stringstream ss;
    line += ValueName;
    line += "=";
    line += Value;
    ifstream file(FileName);
    char *FileContent = new char[100];
    while(!file.eof())
    {
        lines ++;
        file.getline(FileContent, 200);
        ss << FileContent;
        ss >> content;
    }
    if(lines != 0) { content += "\n"; }
    content += line;
    ofstream File(FileName);
    File << content;
    File.close();
    delete FileContent;
}
Der Code funktioniert wenn ich "content += "\n";" weglasse, aber dann steht alles in einer Zeile.
Wenn ich "\n" einfüge wird im *.txt eine Zeile frei gelassen und 2. Zeile das gegebene geschrieben und sonst nichts mehr (also keine weiteren inputs)

Re: '\n' Problem :/

Verfasst: So Okt 23, 2011 1:33 pm
von MoonGuy
Kmitska hat geschrieben:Hallo!
Erstelle gerade eine Funktion, die paar Sachen zum Text einfügen soll und dabei neue Zeile anfangen soll.

Code: Alles auswählen

void YSet(char FileName[], char ValueName[], char Value[])
{
    using namespace std;
    int lines;
    string line;
    string content;
    stringstream ss;
    line += ValueName;
    line += "=";
    line += Value;
    ifstream file(FileName);
    char *FileContent = new char[100];
    while(!file.eof())
    {
        lines ++;
        file.getline(FileContent, 200);
        ss << FileContent;
        ss >> content;
    }
    if(lines != 0) { content += "\n"; }
    content += line;
    ofstream File(FileName);
    File << content;
    File.close();
    delete FileContent;
}
Der Code funktioniert wenn ich "content += "\n";" weglasse, aber dann steht alles in einer Zeile.
Wenn ich "\n" einfüge wird im *.txt eine Zeile frei gelassen und 2. Zeile das gegebene geschrieben und sonst nichts mehr (also keine weiteren inputs)

Würde mich freuen, wenn du ab und an mal das hier lesen würdest.
Was soll der Code denn jetzt genau machen, was macht er zurzeit, was ist das Problem?
Funktion, die paar Sachen zum Text einfügen soll und dabei neue Zeile anfangen soll.
Schön, was für "paar Sachen"? Dein ValueName und Value?
Der Code funktioniert wenn ich "content += "\n";" weglasse, aber dann steht alles in einer Zeile.
Dann würde ich mir diese Stelle mal genauer anschauen. Du hast vorher die Abfrage: "lines != 0". Leider hast du lines nur initialisiert, nie deklariert. Du rechnest ständig, im while-loop, +1 auf diese Unbekannte Zahl, und anschließend überprüfst du, ob sie ungleich Null ist. Die Chancen stehen hoch. Schau dir doch bitte deine Compiler-Warnings auch an.
Also wird "content += "\n";" immer aufgerufen, ganz egal, ob es gebraucht wird oder nicht. An dem Befehl selbst sehe ich nichts falsches.

Außerdem, du reservierst 100 Byte für FileCOntent, willst aber bis zu 200 Byte auslesen. Das kann doch nur schief gehen.

Mir fällt gerade sonst nicht viel auf, das liegt aber auch daran, dass ich mich mit C++ Filestreams sowie C++ Strings nie auseinander gesetzt habe. Bin dort ziemlich Retro und ich muss zugeben, zurückgeblieben, in der C-Syntax.

Re: '\n' Problem :/

Verfasst: So Okt 23, 2011 5:37 pm
von Kmitska
Ich will halt einen String in einer Datei rein schreiben, ohne dass dabei der Inhalt verloren geht, also: dran hängen.

Re: '\n' Problem :/

Verfasst: So Okt 23, 2011 6:10 pm
von Kerli
1. Wenn du mit C++ Strings arbeitest würde ich nach Möglichkeit nicht mit char[] mischen. Zum zeilenweise einlesen gibt es auch eine Funktion die mit C++ Strings arbeitet: http://www.cplusplus.com/reference/string/getline/

2. Wenn es dir nur darum geht Text an eine Datei anzuhängen, dann verwende doch die Option ios_base::app (von append):

Code: Alles auswählen

std::ofstream file("file.txt", std::ios_base::out | std::ios_base::app);