WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Probleme mit fprintf

 

Sumli

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.10.2008, 21:03     Titel: Probleme mit fprintf
  Antworten mit Zitat      
Hi und hallo zusammen,

ich habe ein Problem mit fprintf. Ich möchte einige dDaten in eine Datei schreiben. Das funktioniert auch alles. Nur ein Zeilenumbruch mit
fprintf(file,%d\n',11); funktioniert nicht. Anstatt das die nächsten Daten in die nächste Zeile in der Textdatei geschrieben werden, wird nur ein komisches kleines Rechteck angezeigt und dahinter dann direkt die neuen Daten eingetragen. Der macht einfach diesen Zeilenumbruch nicht und fügt stattdessen dieses kleine Rechteck ein, was immer das auch für ein Zeichen ist.

\r geht auch nicht. Kann mir eventuell jemand sagen, woran das liegen könnte?

Grüße
Sumli


Sumli

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.10.2008, 21:13     Titel:
  Antworten mit Zitat      
Hallo,

ich habs schon *ditsch. Es muss \r\n heißen.

Grüße
Sumli
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.05.2012, 13:21     Titel: Vielen Dank
  Antworten mit Zitat      
Das war genau die Info die ich brauchte.

Viel zu oft findet man im Internet genau die Frage die man auch gerade hat.
Klickt man dann genau die Frage an gibt es mehrere Möglichkeiten:
1.) "die erste Antwort ist: warum googlest du nicht?" -Hallo? das hier ist der erste Treffer zu meiner Frage.

2.) es kommt viel dummes Blabla oder der Frage wird ausgewichen " sowas braucht doch keiner" "warum nimmst du nicht..."

3.) "Ich habe die Lösung gefunden." -Ja und wie lautet die???

Und genau deshalb sage ich danke, weil es endlich mal jemand macht und sie postet nachdem er sie gefunden hat.

DANKE ^^
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 31.05.2012, 14:11     Titel:
  Antworten mit Zitat      
Ja, das ist aber OS und Editor abhängig, also einige brauchen Rückwagen(\r) und Neue Zeile (\n), um in die neue Zeile zu springen. Andere wiederum nicht.
Deswegen kann FOPEN mit erweiterten Parametern aufgerufen werden
Code:

fid = fopen('file.txt','wt+')
fprintf(fid, '1\n2');
fclose(fid)
 
Private Nachricht senden Benutzer-Profile anzeigen
Verschoben: 31.05.2012, 14:26 Uhr von denny
Von Sonstige MATLAB Fragen nach Programmierung
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 01.06.2012, 01:49     Titel:
  Antworten mit Zitat      
Hallo,

FOPEN(wt) hat tückische Nebenwirkungen. Dehalb noch mehr Details:
Code:
fid = fopen('FileName.txt', 'w');
fprintf(fid, '%s\n', 'hello');
fclose(fid);

Dies erzeugt auch unter Windows korrekte Zeilenumbrüche, nämlich CHAR(10). Nur wenn man den Windows Editor nutzt, um das File anzuschauen, werden die Umbrüche falsch dargestellt. WordPad, NotePad++, Word, Emacs, XEmacs, Matlab's editor, vi, WordPerfect, Alpha für MacOS 9 etc. schaffen das aber. Ausser dem Windows Editor hatte auch Matlab 6.1 unter Linux Schwierigkeiten mit speziellen Zeilen-Umbrüchen.
Deshalb behaupte ich, dass nicht CHAR(10) "inkorrekt" ist, sondern der Windows Editor.

Wenn man aber unbedingt die DOS-Zeilenumbrüche benötigt, kann man dies entweder unter Windows so erreichen:
Code:
fid = fopen('FileName.txt', 'wt');  % Im Text-Mode
fprintf(fid, '%s\n', 'hello');
fclose(fid);

Nun wird CHAR([13, 10]) als Zeilenumbruch eingefügt, wenn das Programm unter Windows läuft. Sowie man das Programm aber unter MacOS oder Linux startet, wird CHAR(10) verwendet. Dies entspricht aber nicht der Anforderung "wenn man unbedingt die DOS-Zeilenumbrüche benötigt"!

Betriebssystem-unabhängig läßt sich das wie oben gezeigt erreichen:
Code:
fid = fopen('FileName.txt', 'w');  % KEIN Text-Mode
fprintf(fid, '%s\r\n', 'hello');
% Oder:
NL = char([13, 10);
fprintf(fid, ['%s', NL], 'hello');
fclose(fid);

Mit der letzteren Methode hat man noch die Möglichkeit an einer zenmtralen Stelle im Programm die Zeilen-Umbrüche zu kontrollieren und muss nicht jeden FPRINTF-Befehl editieren, wenn man den Stil mal ändern möchte.

Eigentlich wirkt fopen(wt) einfacher. Dies hat aber noch andere Auswirkungen, die verwirrend sein können:
1. Das Zeichen ^Z, also char(26), wird als File-Ende interpretiert. Wenn man also irgendwo ein Byte mit dem Wert 26 im File stehen hat, wird das einlesen an dieser Stelle abbrechen. Die erscheint z.B. nach "fwrite(fid, 123456774.5)", da dies als DOUBLE geschrieben eben auch ein UINT8(26) enthält. Zudem werden im Text-Mode CHAR([13,10]) als ein Buchstabe gezählt, so dass man beim Navigieren mit FSEEK zu unerwarteten Positionen gelangen kann. Ein CHAR(8) ist das Delete-Zeichen, welches das vorhergehende löscht. Und die weiteren Steuerzeichen von CHAR(0) bis CHAR(31) können ebenfalls zu unerwarteten Ergebnissen führen.

Wenn mn als eine Datei zum Lesen oder Schreiben im Text-Mode öffnet, sollte man sich unbedingt sicher sein, dass das File keine binär geschriebenen Werte enthält. Zudem erzeugt der Text-Mode unterschiedliche Ausgaben auf unterschiedlichen Betriebssystemen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.