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

 

Florre
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 28.02.13
Wohnort: ---
Version: R2009a, R2016b
     Beitrag Verfasst am: 13.09.2013, 09:31     Titel: probleme mit fprintf
  Antworten mit Zitat      
Hallo liebe Forumgemeinde,

ich habe ein kleines Probelm und hoffe Ihr könnt mir da Helfen...
Besser gesagt es sind zwei Probleme...
Mein Programm besteht aus einigen Zeilen Code (den will ich euch nicht antun)

Jetzt ist es leider so das ich mit diesem Programm sehr viele Daten auswerten muss das läuft soweit ganz gut und recht schnell... Bis zu den Punkt wenn es ans speichern geht. Das dauert ewig.... Pro Datei sind das ca. 7sec. bei knapp 1000 Dateien is das schon relativ lange..

Mein Code sieht zur Zeit so aus...

Code:

fid=fopen(Dokument,'wt');
fprintf(fid,'%s\t','Time','Primaerspannung','Primaerstrom','Sekundaerspannung', ...
                    'Sekundaerstrom','Primaerleistung','Primaerenergie','Sekundaerleistung','Sekundaerenergie');
fprintf(fid,'\n');
fprintf(fid,'%s\t','s','V','A','V','A','W','Ws','W','Ws');
fprintf(fid,'\n');
fclose(fid);
dlmwrite(Dokument,Einlesen,'delimiter', '\t','-append');


Meine Frage ist wie bekomm ich das dlmwrite weg (Das dauert am längsten)?? Im Endeffekt speichert mir das dlmwrite eine Matrix in meine Datei... das bekomm ich doch bestimmt auch mit fprintf hin hab das probiert aber bekomme das nicht hin...

Jetzt würde ich gerne meine Matrix (Einlesen) mit fprintf speichern bekomme das aber irgendwie nicht hin...
Das war mein Versuch
Code:
fprintf(fid,'%f %f %f %f %f %f %f %f %f\n',Einlesen);

Aber das macht er nicht so wie er soll

Lg Florre
Private Nachricht senden Benutzer-Profile anzeigen


Florre
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 28.02.13
Wohnort: ---
Version: R2009a, R2016b
     Beitrag Verfasst am: 13.09.2013, 10:05     Titel:
  Antworten mit Zitat      
Hallo,

Ich hab mal nen bissel rum gespielt und bin auf das hier gekommen

Code:
fid=fopen(Dokument,'wt');
fprintf(fid,'%s\t','Time','Primaerspannung','Primaerstrom','Sekundaerspannung', ...
                    'Sekundaerstrom','Primaerleistung','Primaerenergie','Sekundaerleistung','Sekundaerenergie');
fprintf(fid,'\n');
fprintf(fid,'%s\t','s','V','A','V','A','W','Ws','W','Ws');
fprintf(fid,'\n');
for zeile=1:length(Einlesen)
fprintf(fid,'%f\t',Einlesen);  
fprintf(fid,'\n');
end
fclose(fid);


Das ist aber leider noch langsamer als der alte Code und zum anderen hab ich das problem das er weniger Stellen reinschreibt als ich brauche.. und zum anderen Ist es so das die Zahlen teilweise so klein Werden das matlab exponetial Schreibweise benutzt und dann steht nur noch 0,0000 drinn..
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 13.09.2013, 10:20     Titel:
  Antworten mit Zitat      
da ich deine daten nicht hab kann ich das jetzt nicht überprüfen
aber irgendwie so
Code:
fid=fopen(Dokument,'wt');
fprintf(fid,'%s\t','Time','Primaerspannung','Primaerstrom','Sekundaerspannung', ...
                    'Sekundaerstrom','Primaerleistung','Primaerenergie','Sekundaerleistung','Sekundaerenergie');
fprintf(fid,'\n');
fprintf(fid,'%s\t','s','V','A','V','A','W','Ws','W','Ws');
fprintf(fid,'\n');
fprintf(fid,[repmat('%f\t ',1,length(Einlesen)), '\n'],Einlesen);  
fclose(fid);

wie man die ausgabe editiert findet sich in der doc. ( das %f)
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Florre
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 28.02.13
Wohnort: ---
Version: R2009a, R2016b
     Beitrag Verfasst am: 13.09.2013, 10:57     Titel:
  Antworten mit Zitat      
Hi,

Hab das mal von dir ausprobiert Winkow...

Irgendwie funktioniert das nicht ganz....

Ich hab mal ne Datei von mir angehangen wie es sein sollte das ist mit dlmwrite gemacht...

und ich habe die Datei noch nen bissel eingekürzt sonst währe sie viel zu groß....

Lg Florre

Messung_621_neu.txt
 Beschreibung:

Download
 Dateiname:  Messung_621_neu.txt
 Dateigröße:  958.28 KB
 Heruntergeladen:  560 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 13.09.2013, 11:03     Titel:
  Antworten mit Zitat      
Zitat:
Irgendwie funktioniert das nicht ganz....

das ist zwar eine sehr detailirte fehlermeldung aber ich frage dennoch noch einmal nach. was funktioniert denn nicht ?
ich geh jetzt mal davon aus das es an dem fehler liegt den ich vorhin gemacht hab.
es muss
Code:
fprintf(fid,[repmat('%f\t ',1,size(Einlesen,2)), '\n'],Einlesen);  

sein. ^^ ein wenig mitarbeit des fragestellers wird erwartet Razz
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Florre
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 28.02.13
Wohnort: ---
Version: R2009a, R2016b
     Beitrag Verfasst am: 13.09.2013, 11:21     Titel:
  Antworten mit Zitat      
Hi,

Ok entschuldige....

So ich hab das jetzt mal mit dem neuen Code gemacht den du gepostet hast....

Jetzt ist es so das er die Erste Spalte meiner Matrix nimmt und diese einfach zeilen Weise da rein schreibt....

Weiß jetzt nicht ob ich das richtig erklärt habe

mal nen Bsp:

A=
1 2 3
2 5 6
6 6 7
7 5 9
Dann speichert er das so

1 2 6
7 2 6
5 3 6
7 9

... Leider hab ich keine Ahnung woran das liegt...
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 13.09.2013, 11:30     Titel:
  Antworten mit Zitat      
hab mal kurz in die doc geguckt. liegt daran das er die werte spaltenweise abarbeitet.
Code:
A=[1,2,3;2,5,6;6,6,7;7,5,9]'
fid=fopen('Test.txt','w')
if fid==-1
    disp('could not open')
else
fprintf(fid,[repmat('%f\t ',1,size(A,1)), '\n'],A);  
fclose(fid)
end

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Florre
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 60
Anmeldedatum: 28.02.13
Wohnort: ---
Version: R2009a, R2016b
     Beitrag Verfasst am: 13.09.2013, 11:39     Titel:
  Antworten mit Zitat      
Hi,

so jetzt läuft es ich bedanke mich bei dir Winkow...

Jetzt muss ich nur noch das mit den Kommastellen hinbekommen aber das ist kein problem... Jedenfalls besten Dank und es ist auf jedenfall schneller als dlmwrite

dlmwrite brauchte im zwischen 6 und 7 sec.
diese Variante braucht zwischen 2 und 3 sec.

LG Florre
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.