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

dlmwrite

 

Otter222
Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 29.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2012, 11:55     Titel: dlmwrite
  Antworten mit Zitat      
Hallo,

ich möchte gerne eine txt-Datei die folgendermaßen aussieht:

Zeit T_Um n_GW ...
1 14 1000
2 15 1010
3 14 1000 ...
...

dazu habe ich folgendes ausprobiert:
Code:

%txt Datei schreiben


header = {'|Zeit|T_Um|n_GW|M_Ret|T_H2O_M|T_Ol_M|v|n_Mot|M_Mot|T_WAT_A_H2O_3|T_Stahl_1|T_WAT_Ol_E|';
    '|-|°C|1/min|Nm|°C|°C|km/h|1/min|Nm|°C|°C|°C|'};
M= [Zeit,T_Um,n_GW,M_Ret,T_H2O_M,T_Ol_M,v,n_Mot,M_Mot,T_WAT_A_H2O_3,T_Stahl_1,T_WAT_Ol_ein];

dlmwrite('Vergleich.txt',M,'delimiter','\t')

fid = fopen('Vergleich.txt', 'w');
fprintf('%s \n', header{:})
for I=1:length(Zeit)
    fprintf('|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|\n',Zeit(I),T_Um(I),n_GW(I),M_Ret(I),T_H2O_M(I),T_Ol_M(I),v(I),n_Mot(I),M_Mot(I),T_WAT_A_H2O_3(I),T_Stahl_1(I),T_WAT_Ol_ein(I));
end
fclose(fid)  
 



Leider wird keine txt Datei erzeugt
und ich bekomme immer Warnungen, die folgendermaßen aussehen:
Code:

In TXT_Schreiben at 13
|Warning: The argument for the %s format specifier must be of type char (a string).
> In TXT_Schreiben at 13
|Warning: The argument for the %s format specifier must be of type char (a string).
> In TXT_Schreiben at 13
|Warning: The argument for the %s format specifier must be of type char (a string).
> In TXT_Schreiben at 13
|3.314186e-048|Warning: The argument for the %s format specifier must be of type char (a string).
> In TXT_Schreiben at 13
Q|Warning: The argument for the %s format specifier must be of type char (a string).
> In TXT_Schreiben at 13
g|Warning: The argument for the %s format specifier must be of type char (a string).
> In TXT_Schreiben at 13
|2.121996e-314|Warning: The argument for the %s format specifier must be of type char (a string).
 


Kann mir jemand sagen, wo evtl mein Fehler liegen könnte?
Schon kleine Tipps helfen mir immer weiter!

vielen Dank
Otter222
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 07.02.2012, 13:55     Titel:
  Antworten mit Zitat      
Hallo

Also ich verstehe sowieso nicht,
warum DLMWRITE nutzen und später mit FOPEN/FPRINTF zu überschreiben...

Wenn du mit FPRINTF in File schreiben möchtest, dann muss du Fileidentifier übergeben.
die Warnung kommt wahrscheinlich deshalb, weil, du Übergabeformat bei FPRINTF String definierst. Werte sind aber Wahrscheinlich in Double.
Also ich kenne ja deine Formate nicht lese Doku zu FPRINTF
%s --String
%f -- Kommazahl
%d -- Integer
usw..

Code:

fid = fopen('Vergleich.txt', 'w');
fprintf(fid, '%s \n', header{:})
for I=1:length(Zeit)
    fprintf(fid, '|%d|%d|%d|%d|%d|%d|%d|%d|%d|%d|%s|%s|\n',Zeit(I),T_Um(I),n_GW(I),M_Ret(I),T_H2O_M(I),T_Ol_M(I),v(I),n_Mot(I),M_Mot(I),T_WAT_A_H2O_3(I),T_Stahl_1(I),T_WAT_Ol_ein(I));
end
fclose(fid)  
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Otter222
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 29.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2012, 14:25     Titel:
  Antworten mit Zitat      
Vielen Dank für deine Antwort!
ich hab da wohl was richtig durcheinandergebracht.

Eigendlich möchte ich einfach die Überschriften über die Spalten schreiben:

Überschrift:
Code:

dlmwrite('Vergleich.txt',['t' 'T_Um/°C' 'n_GW/rpm' 'M_Ret/Nm' 'T_H2O_M/°C' 'T_Ol_M/°C' 'v/km/h' 'n_Mot/rpm' 'M_Mot/Nm' 'T_WAT_A_H2O/°C' 'T_Stahl/°C' 'T_WAT_Ol_ein/°C']);
 


Spalten:
Code:

dlmwrite('Vergleich.txt',[t double(T_Um) double(n_GW) double(M_Ret) double(T_H2O_M) double(T_Ol_M) double(v) double(n_Mot) double(M_Mot) double(T_WAT_A_H2O_3) double(T_Stahl_1) double(T_WAT_Ol_ein)],'delimiter','\t','newline','pc','precision','%.2f','roffset', 2);
 


nur weiß ich nicht, wie ich die Überschriften über die Spalten bekomme.

Gibt es nicht einen einfachen Trick?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 07.02.2012, 14:53     Titel:
  Antworten mit Zitat      
Also DLMWRITE, kann nur Zahlenmatrizen rausschreiben
Zuerst mit FOPEN FPRINTF Header rausschreiben
Dann über DLMWRITE mit Option -APPEND Matrix anfügen.

so was in der Art:
Code:

header={'t1', 't2', 't3'};
M     = rand(6,3);
fid = fopen('Vergleich.txt', 'w');
fprintf(fid, '%s\t',header{:});
fprintf(fid, '\n');
fclose(fid);

dlmwrite('Vergleich.txt'   ,...
M                          ,...
 '-append'                 ,...
'delimiter' , '\t'         ,...
'newline'   , 'pc'         ,...
'precision' , 2            ,...
'roffset'   , 1);

edit Vergleich.txt
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Otter222
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 29.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2012, 15:11     Titel:
  Antworten mit Zitat      
Hallo,

danke für deine Hilfe, ich habe das ganze entsprechend geändert:
Code:

header = {'Zeit','T_Um','n_GW','M_Ret','T_H2O_M','T_Ol_M','v','n_Mot','M_Mot','T_WAT_A_H2O_3','T_Stahl_1','T_WAT_Ol_E'};
 
fid = fopen('Vergleich.txt', 'w');
fprintf(fid, '%s\t',header{:});
fprintf(fid, '\n');
fclose(fid);


dlmwrite('Vergleich.txt',[t double(T_Um) double(n_GW) double(M_Ret) double(T_H2O_M) double(T_Ol_M) double(v) double(n_Mot) double(M_Mot) double(T_WAT_A_H2O_3) double(T_Stahl_1) double(T_WAT_Ol_ein)],'-append','delimiter','\t','newline','pc','precision','%.2f','roffset', 2);
edit Vergleich.txt
 


allerdings bekomme ich die Meldung:

Not enough memory to read file contents:
Java heap space

Die Meldung kam ohne die kopfzeile nicht.
Kannst du mir hierbei auch noch helfen? - Ich hab keine Ahnung was ich machen soll...
(Tipp langt auch schon)

Vielen Dank schon mal
Otter

Zuletzt bearbeitet von Otter222 am 07.02.2012, 15:48, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 07.02.2012, 15:31     Titel:
  Antworten mit Zitat      
Hallo

Wie groß sind denn deine Daten? Die Spaltenvektoren T_um, n_GW usw...
Private Nachricht senden Benutzer-Profile anzeigen
 
Otter222
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 29.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.02.2012, 09:05     Titel:
  Antworten mit Zitat      
Ich hab 12 Spalten und 410247 Zeilen.
für das erstellen der txt-Datei ist das kein Problem. Nur klappt es bei der Datenmenge nicht die Überschrift drüber zu schreiben

Ich dache mir daher, dass ich evtl eine for-Schleife brauchen würde.
Allerdings hab ich keine Ahnung wie ich das schreiben soll, dass Zeile für Zeile geschrieben werden soll...
Hat mir jm einen Tipp?

Code:

header = {'Zeit','T_Um','n_GW','M_Ret','T_H2O_M','T_Ol_M','v','n_Mot','M_Mot','T_WAT_A_H2O_3','T_Stahl_1','T_WAT_Ol_E'};
 
fid = fopen('Vergleich.txt', 'w');
fprintf(fid, '%s\t',header{:});

fprintf(fid, '\n');
fclose(fid);

for I=1:length(t)
dlmwrite('Vergleich1.txt',[t double(T_Umgebung) double(n_GW) double(M_Ret) double(T_H2O_M) double(T_Ol_M) double(v) double(n_Mot) double(M_Mot) double(T_WAT_A_H2O_3) double(T_Stahl_1) double(T_WAT_Ol_ein)],'delimiter','\t','newline','pc','precision','%.2f','roffset', 2);
end

edit Vergleich.txt
 
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 08.02.2012, 09:50     Titel:
  Antworten mit Zitat      
Hallo

mach doch mit alles mit FOPEN/FPRINTF
ist doch viel einfacher
also so z.B

Code:

t             = rand(410247,1);
T_Umgebung    = rand(410247,1);
n_GW          = rand(410247,1);
M_Ret         = rand(410247,1);
T_H2O_M       = rand(410247,1);
T_Ol_M        = rand(410247,1);
v             = rand(410247,1);
n_Mot         = rand(410247,1);
M_Mot         = rand(410247,1);
T_WAT_A_H2O_3 = rand(410247,1);
T_Stahl_1     = rand(410247,1);
T_WAT_Ol_ein  = rand(410247,1);

header = {'Zeit','T_Um','n_GW','M_Ret','T_H2O_M','T_Ol_M','v','n_Mot','M_Mot','T_WAT_A_H2O_3','T_Stahl_1','T_WAT_Ol_E'};
 

fid = fopen('Vergleich.txt', 'w');

fprintf(fid, '%s\t',header{:});

fprintf(fid, '\n\n');
frmt     = repmat({'%0.2f\t'},1,12);
frmt     = [frmt{:}];
frmt(end)= 'n';
num_rows = length(t);
for k=1:num_rows
   tmp_str   = sprintf('Please wait... write %6d/%d', k,num_rows);
   fprintf('%s',tmp_str)
   fprintf(fid                                                    ,...
      frmt                                                        ,...
      t(k)      , T_Umgebung(k)   ,   n_GW(k)   ,  M_Ret(k)       ,...
      T_H2O_M(k), T_Ol_M(k)       ,   v(k)      ,  n_Mot(k)       ,...
      M_Mot(k)  , T_WAT_A_H2O_3(k),   T_Stahl_1(k) ,  T_WAT_Ol_ein(k));
   fprintf('%s',char(sign(tmp_str)*8));
end
fclose(fid);
edit Vergleich.txt
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Otter222
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 45
Anmeldedatum: 29.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.02.2012, 10:25     Titel:
  Antworten mit Zitat      
wow, danke,
das hätt ich nie hinbekommen,

vielen Dank dir denny!

Grüßle Otter
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.