Frage

Ich bin ein Programm auf einer Linux-Plattform zu schreiben, die Textdateien generieren, die unvermeidlich angesehen werden auf einer Windows-Plattform.

Im Moment erzeugt std::endl in eine ostream Bestehen der CR-Zeichen nur für Zeilenumbrüche. Natürlich sind diese Textdateien aussehen falsch in MS Editor.

  1. Gibt es eine Möglichkeit std::endl so zu ändern, dass es CR + LF für Newline verwendet statt LF?
  2. Ich weiß, ich könnte meine eigene benutzerdefinierte Manipulator, wie win_endl schreiben, für meine eigene Zeilenumbrüche zu erzeugen, aber ich benutze das std::endl Symbol in vielen Orten, und wie viele Programmierer haben eine Tendenz, die Sache zu tun, die am wenigsten erfordert Arbeit möglich. Kann ich einfach std::endl Überlastung CR + LF zu erzeugen, oder ist dies eine dumme Idee für Wartbarkeit?

NB: Ich überprüfte diese Frage , aber es ist zu fragen über die andere Richtung, und die akzeptierte Antwort scheint eher unvollständig.

War es hilfreich?

Lösung

eine Datei im Textmodus öffnen sollte dazu führen, std::endl auf die entsprechende Zeile für Ihre Plattform endet umgewandelt werden. Ihr Problem ist, dass Newline für Ihre Plattform geeignet, aber die Dateien, die Sie erstellen, sind nicht für Ihre Plattform vorgesehen.

Ich bin mir nicht sicher, wie Sie auf Überlastung oder Ändern endl planen, und sein Verhalten zu ändern sicherlich für alle Entwickler neu zu einem Projekt überraschend sein würde. Ich würde empfehlen, win_endl Schalt (sollte eine einfache Suche und Ersetzen) oder vielleicht von einem Standard-ostream zu einem Schalt Boost.Iostreams Filterung Strom für Sie die Konvertierung zu tun.

Andere Tipps

std::endl ist basicly:

std::cout << "\n" << std::flush;

So verwenden nur "\r\n" statt und die bündig weglassen. Es ist schneller auf diese Weise auch!

Von der Ostream Header-Datei auf Endl:

  

Dieser Manipulator oft fälschlicherweise verwendet, wenn eine einfache Newline gewünscht wird, was zu einer schlechten Pufferleistung.

Windows Notepad ist so ziemlich das nur Windows-Programm, das Sie damit umgehen nicht finden nicht nur LF-richtig-Dateien. Fast alles andere (einschließlich WordPad) Griffe LF-only just fine-Dateien.

Dieses Problem ist ein Fehler in dem Editor.

Sie sollten nicht \ r \ n verwenden. Verwenden Sie einfach \ n, aber dann den Stream öffnen in „Text“ -Modus, der als die Konvertierung für Sie tun. Sie können über Cross-Plattform nicht egal, aber dies ist der offizielle Weg, es zu tun.

Auf diese Weise wird der gleiche Code spucken-out \ n auf Unix, \ r \ n an Fenstern und \ r auf dem Mac.

Hier war meine Lösung für das Problem. Es ist ein bisschen ein Mash-up von allen Info in den Antworten zu finden:

  1. Ich habe einen Makro in einer win_endl.h-Datei für das Newline ich wollte:

    #define win_endl "\r\n"
    
  2. Dann habe ich eine Suche und Ersetzen:

    sheepsimulator@sheep\_machine > sed -i 's/std::endl/win_endl' *
    

Und sicher alle meine Dateien enthalten win_endl.h.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top