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

korrekter Gebrauch von fprintf

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2008, 17:00     Titel: korrekter Gebrauch von fprintf
  Antworten mit Zitat      
Ich würde gerne den Inhalt eines cellarrays in eine txt-Datei speichern. Mit folgendem Code:

Code:
daten = get(handles.outText, 'String');
fid = fopen('data2.txt','w+');
fprintf(fid, '%s', daten);
fclose(fid);


kriege ich aber nur diesen Buchstabensalat heraus:

Code:
ezdrwrseititett ee


Eigentlich sollte folgendes herauskommen:

erste
zweite
dritte

Was hab ich falsch gemacht? Question


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 11.08.2008, 17:39     Titel:
  Antworten mit Zitat      
Kommisch. Eigentlich sollte bei dir eine Fehlermeldung kommen.
??? Error using ==> fprintf
Function is not defined for 'cell' inputs.


Hast du wirklich ein Cell Array?



Ansonsten funktioniert es so:
Code:

daten = {'erster','zweiter','dritter'};
%
% wt, um Umbrüche in Notepad
% richtig zu interpretieren
fid = fopen('data2.txt','wt+');
%  
fprintf(fid, '%s\n', daten{:});
fclose(fid);
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2008, 18:21     Titel:
  Antworten mit Zitat      
Ich bin mir jetzt auch nicht mehr ganz sicher ob es wirklich ein cellarray ist. Ich hab einfach strings mit strvcat aneinandergehängt. Wenn ich mir das in der command window ausgeben lasse dann stehen sie wunderbar untereinander.
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2008, 18:30     Titel:
  Antworten mit Zitat      
Hm, ich hab noch ein wenig rumprobiert. Wenn ich da {:} anhänge kriege ich ne Fehlermeldung, die deiner ähnlich sieht:

??? Cell contents reference from a non-cell array object.
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 11.08.2008, 19:03     Titel:
  Antworten mit Zitat      
strvcat liefert eine Char Matrix zurück, dabei werden zu kurze Strings mit Leerzeichen aufgefüllt.

Wenn du dir genauer die Ausgabe anschaust, da siehst
dass Ausgabe spalteweise über die Matrix verläuft
Code:

1  2  3  4  5  6
e  r  s  t  e
z  w  e  i  t  e
d  r  i  t  t  e
 



fprintf(fid, '%s\n', daten);

Ausgabe: ezdrwrseititett ee


wenn die Matrix aber transponiert wird dann siehst du die Zeile

fprintf(fid, '%s\n', daten');

Ausgabe: erster zweiterdritter

Um wohl formatiert auszugeben brauchst du wohl for-Schleife.
Code:

%
for i=1:size(daten,1)
  fprintf(fid, '%s\n', daten(i,:));
end
 


Oder benutzt wirklich cellarrays
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 11.08.2008, 19:06     Titel:
  Antworten mit Zitat      
Anonymous hat Folgendes geschrieben:
Hm, ich hab noch ein wenig rumprobiert. Wenn ich da {:} anhänge kriege ich ne Fehlermeldung, die deiner ähnlich sieht:

??? Cell contents reference from a non-cell array object.


Ist gar nicht ähnlich,
Bei dir heißt, dass es kein Cell-Objekt ist
Bei mir heißt, dass die Funkton keine Cells verarbeitet kann
Private Nachricht senden Benutzer-Profile anzeigen
 
Germanus
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 15.12.09
Wohnort: ---
Version: 7.8.0 (R2009b), Linux
     Beitrag Verfasst am: 05.10.2010, 16:19     Titel:
  Antworten mit Zitat      
Hallo,

irgendwie funktioniert die Funktion sprintf mit %s und %d in Kombination nicht.

Mit dem nachfolgenden Code soll später einmal ein struct in einer Funktion zusammengebaut werden, allerdings klappt der Zusammenbau des (sub)strings schon nicht:

Ziel ist:
Code:
A.B(1).C(1)
% also der Substring
.B(1).C(1)
 


Verwendet wird:
Code:

% Dezentrale Definition:
name={'B','C'};
instanz=[1,1];

% Zusammenbau des strings:
sprintf('.%s(%d)',name{:},instanz)
 


Vielen Dank für Lösungsvorschläge!
MFG, Germanus
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 05.10.2010, 17:26     Titel:
  Antworten mit Zitat      
Hallo

Eine Schleife rumherum basteln. Weil der Ausdruck, viel zu komplex ist, dass es man in einer Zeile löst.
so:
Code:

% Dezentrale Definition:
name={'B','C'};
instanz=[1,1];

% Zusammenbau des strings:
str_parts=cell(size(name));

for k=1:length(name)
   str_parts{k} = sprintf('.%s(%d)',name{k},instanz(k));
end

str = [str_parts{:}]
 
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.