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

Export von Cell in mehrere txt-files

 

Gast_stern

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.05.2017, 14:48     Titel: Export von Cell in mehrere txt-files
  Antworten mit Zitat      
Hallo,

habe eine Cell Array XX mit der Dimension von 31*10 und XX{i,j} besteht jeweils aus 1000 Zeilen und 31 Spalten. Diese 1000 Zeilen und 31 Spalten sollten am Ende in einem jeweil eigenen txt-file stehen.

Hierzu habe ich folgende Variante gewählt:

Code:

save(file_name_xc,'XX','-ascii');

header = '%alb_newsnow alb_oldsnow alb_decrease alb_firn alb_ice alb_shallowpack_ice alb_shallowpack_rock crit_swe_newsnow crit_swe_shallowpack snow_cf temp_wetbulb_lthr temp_wetbulb_uthr clmaxn slope_min slope_max slope_cf curv_max cwh_snow cwh_firn cch refree n_snow k_snow n_firn k_firn n_ice k_ice n_rock k_rock n_soil k_soil';
% Formattyp festlegen für jede einzelne Zeile
formattype = '' ; for i=1:M-1; formattype = [ formattype '%g\t' ]; end; formattype = [ formattype '%g\n' ];
% öffnen des files, mit dem Status w für write
fid = fopen(file_name_xc,'w')  ;
% Schreiben der Überschrift als string und Zeilenumbruch
fprintf(fid,'%s\n',header);
% Schreiben der XX -> hier cell string
 [nrows,ncols] = size(XX);
for row = 1:nrows
 fprintf(fid,formattype,XX);
end

fclose(fid);

 


Folgende Warnung wurde ausgegeben (für die Code-Zeile save(file...)):

Zitat:

Warning: Attempt to write an unsupported data type to an ASCII file.
Variable 'XX' not written to file.
> In write_to_file at 209



Darauf aufbauend, versuchte ich vor dem save-Befehl die cell in eine Matrix zu konvertieren mit

Code:


In diesem Fall werden dann alle Zeilen und Spalten in eine einzige Matrix und in ein einziges txt-file geschrieben.

Wie kann man nun jedes XX{} in ein eigenes txt-file schreiben, welches schlussendlich aus 1000 Zeilen und 31 Spalten besteht?

Danke


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.05.2017, 15:07     Titel: Re: Export von Cell in mehrere txt-files
  Antworten mit Zitat      
Hallo Gast_stern,

Text-Files sind nur sinnvoll, wenn ein Mensch das File lesen und editieren soll. Bei so vielen Zahen ist das sehr unwahrscheinlich.
save gibt zwar auch ASCII-Files aus, das ist aber ziemlich fragil. Wenn hier etwas geändert wird, ist es nicht unbedingt sicher, dass [function]load/function] das auch wieder einliest.

Allerdings schreibst Du doch hinterher Files per FOPEN+FRPINTF. Wozu dient dann das [function]save[/function] überhaupt?

Die einzelnen Matrizen zu speichern ist relativ einfach:
Code:
for k = 1:numel(XX)
  XXk = XX{k};
  ... % Hier dann der Code um ein File abzuspeichern.
  ... % k wird für den Filenamen auch sinnvoll sein
end

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast_stern

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.05.2017, 17:22     Titel: Re: Export von Cell in mehrere txt-files
  Antworten mit Zitat      
Hallo Jan S,

vielen Dank für die Hilfestellung, funktioniert nun mit deinem Lösungsvorschlag.

Umgesetzt wie folgt:
Code:

for k = 1:numel(XX)
    XXk = XX{k};
    file_name_xc = ['param_xc' num2str(k(:).') '.txt'];
    save(file_name_xc);
    % Definition der Spaltenüberschriften in der Kopfzeile
    header = '%alb_newsnow alb_oldsnow alb_decrease alb_firn alb_ice alb_shallowpack_ice alb_shallowpack_rock crit_swe_newsnow crit_swe_shallowpack snow_cf temp_wetbulb_lthr temp_wetbulb_uthr clmaxn slope_min slope_max slope_cf curv_max cwh_snow cwh_firn cch refree n_snow k_snow n_firn k_firn n_ice k_ice n_rock k_rock n_soil k_soil';
    % Formattyp festlegen für jede einzelne Zeile
    formattype = '' ; for i=1:M-1; formattype = [ formattype '%g\t' ]; end; formattype = [ formattype '%g\n' ];
    % öffnen des files, mit dem Status w für write
    fid = fopen(file_name_xc,'w')  ;
    % Schreiben der Überschrift als string und Zeilenumbruch
    fprintf(fid,'%s\n',header);
    fprintf(fid,formattype,XXk);
    fclose(fid);

end


 


Viele Grüße
Gast_stern
 
Gast_stern

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.05.2017, 13:58     Titel: Re: Export von Cell in m
  Antworten mit Zitat      
Hallo,

ein Problem tritt in der oben angeführten Lösungsversion auf. Die cell-arrays werden zwar in die txt-files geschrieben (auch die Dimensionen stimmen überein), aber die Spalten/Zeilen-Anordnungen werden vertauscht. Das txt-file wird Zeile für Zeile mit einem Parameter gefüllt und nicht Spalte für Spalte.

Wie kann man nun dieses Problem lösen? Schlussendlich sollte im jeweiligen txt-file in den 31 Spalten untereinander der jeweilige Parameter stehen (also 1. Spalte alb_newsnow,...) und in Summe 1000 Zeilen aufweisen.

Auch der Versuch mit folgender Variante löst das Problem nicht:

Code:

for k = 1:numel(XX)
    row = 1:size(XX(k),1);
    col = 1:size(XX(k),2);
    XXk = XX{row,col};
    % Definition eines Namens für das File mit den Werten der c-CDF
    file_name_xc = ['param_xc' num2str(k(:).') '.txt'];
    save(file_name_xc);
    % Definition der Spaltenüberschriften in der Kopfzeile
    %header = '%alb_newsnow alb_oldsnow alb_decrease alb_firn alb_ice alb_shallowpack_ice alb_shallowpack_rock crit_swe_newsnow crit_swe_shallowpack snow_cf temp_wetbulb_lthr temp_wetbulb_uthr clmaxn slope_min slope_max slope_cf curv_max cwh_snow cwh_firn cch refree n_snow k_snow n_firn k_firn n_ice k_ice n_rock k_rock n_soil k_soil';
    % Formattyp festlegen für jede einzelne Zeile
    formattype = '' ; for i=1:M-1; formattype = [ formattype '%g\t' ]; end; formattype = [ formattype '%g\n' ];
    % öffnen des files, mit dem Status w für write
    fid = fopen(file_name_xc,'w')  ;
    % Schreiben der Überschrift als string und Zeilenumbruch
    fprintf(fid,'%s\n',header);
    fprintf(fid,formattype,XXk);
    fclose(fid);
   

end
 


Besten Dank
 
Gast_stern

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.05.2017, 18:59     Titel: Re: Export von Cell in mehrere txt-files
  Antworten mit Zitat      
Hallo,

siehe

https://de.mathworks.com/matlabcent.....to-more-than-one-txt-file

Lg
Gast_stern
 
Gast_stern

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.06.2017, 14:07     Titel: Re: Export von Cell in m
  Antworten mit Zitat      
Problem gelöst, vielen Dank für die Hilfestellungen Very Happy
 
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.