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 (unterschiedlich langen) Arrays (in csv-Datei)

 

schiffbauer123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.10.2014, 12:42     Titel: Export von (unterschiedlich langen) Arrays (in csv-Datei)
  Antworten mit Zitat      
Hallo,

es gibt mehrere Arrays (Matrizen) der Art:
Länge x 2
(Wobei die Länge verschieden ist.)
Werte sind Zahlen.

Diese Arrays möchte ich aus Matlab exportieren.
Und zwar so, dass die Arrays nebeneinander stehen, also
Spalte 1 und 2: Array 1
Spalte 3 und 4: Array 2
Spalte 5 und 6: Array 3
...

Das kriege ich einfach nicht hin.

Hier mein Code-Minimalbeispiel:
Code:

clear
a=[1 3; 2 6; 3 9; 4 12];
b=[4 2; 5 3];

fprintf( '%f %f \r', a, b );
 


Ich habe schon viel rumprobiert, auch mit Cell arrays, allerdings weiß ich einfach nicht weiter.
Die Arrays sollen halt nicht UNTEReinander, sondern NEBENeinander geschrieben werden.

Hat dazu jemand vielleicht eine Idee?

Abschließen möchte ich das Ergebnis von fprintf (oder einer anderen Methode) in eine Datei schreiben.
mit
Code:

fid = fopen( 'myFile.txt', 'w' ) ;
    fprintf( fid, .......);
fclose( fid );
 


Viele Grüße


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 22.10.2014, 13:56     Titel:
  Antworten mit Zitat      
Hallo
Zitat:
Diese Arrays möchte ich aus Matlab exportieren.
Und zwar so, dass die Arrays nebeneinander stehen, also
Spalte 1 und 2: Array 1
Spalte 3 und 4: Array 2
Spalte 5 und 6: Array 3


Bitte das noch mal erklären, was rauskommen sollte, verstehe ich leider nicht wie du das meinst, weil du ja pro Matrix nur 2 Spalten hast.
z.B. anhand deines Bespiel
Zitat:

a=[1 3; 2 6; 3 9; 4 12];
b=[4 2; 5 3];

Soll das Ergebnis am Ende so aussehen?
1 3 4 2
2 6 5 3
3 9
4 12
Private Nachricht senden Benutzer-Profile anzeigen
 
schiffbauer123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.10.2014, 14:05     Titel:
  Antworten mit Zitat      
Danke erstmal für die Rückfrage.
Die Arrays sollen nebeneinander geschrieben werden, also
Code:

a=[1 3; 2 6; 3 9; 4 12]
b=[4 2; 5 3]
 

Soll werden:
1 3 4 2
2 6 5 3
3 9
4 12

Diese vier (nicht gleichlangen) Spalten würde ich gerne exportieren (habs mit fprintf versucht)
 
schiffbauer123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.10.2014, 14:06     Titel:
  Antworten mit Zitat      
Ähm, ja, genau so wie du gerade vorgeschlagen hast.
War etwas zu schnell...
 
denny
Supporter

Supporter



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

das ist etwas trickreich
Zuerst würde ich vorschlagen dass du alle deine Matrizen in einen Cell Array kopierst, weil danach verwaltungstechnisch einfacher ist

Für die Ausgabe wurde ich die Matrizen dann zu einer großen Matrix zusammensetzen, welche mit NaNs vorinitialisiert wird.
Danach in String die NaNs einfach rauslöschen
so z.B:
Code:

a=[1 3; 2 6; 3 9; 4 12]
b=[4 2; 5 3]
 

% alle deine Matrizen in einen Cell-Array
c            = {a, b};
%
% Zeilenlänge Spaltenlänge rausfinden
row_nmbr     = cellfun(@(x) size(x, 1), c);
col_nmbr     = cellfun(@(x) size(x, 2), c);

% maximale Größe bestimmen
max_row_nmbr = max(row_nmbr);
max_col_nmbr = sum(col_nmbr);


% eine neue Matrix vorinitialisieren
d             = nan(max_row_nmbr, max_col_nmbr);

% Indizien für Splaten bestimmen
end_col_idx   = cumsum(col_nmbr);
start_col_idx = cumsum([1, col_nmbr]);
start_col_idx = start_col_idx(1:end-1);

% Alle Matrizen in eine Matrix kopieren
for k = 1:length(c)

   d(1:row_nmbr(k), start_col_idx(k) : end_col_idx(k)) = c{k};

end

% Ausgabeformat für die Matrix bestimmen
frmt_str = sprintf('%s \n', repmat('%f ', 1, max_col_nmbr));
% Matrix ausgeben
out_str  = sprintf(frmt_str, d');
% NaNs ersetzen
out_str  = regexprep(out_str, 'NaN *', '');
% in Textfile mit fprintf ausgeben, oder in Command Window
fprintf('%s', out_str);

 
Private Nachricht senden Benutzer-Profile anzeigen
 
schiffbauer123

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.10.2014, 16:30     Titel:
  Antworten mit Zitat      
Wow, das klappt 1a!
Wie lange hat dich das gekostet, wenn ich fragen darf? (Ich hatte schon 3-4 Stunden investiert und das hätte ich nie hinbekommen.)

Vielen, vielen Dank auf jeden Fall!

Ein Schiffbauer

P.s.: Ich weiß nicht, wie ich den Status auf beantwortet setzen kann....
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 22.10.2014, 17:55     Titel:
  Antworten mit Zitat      
Zitat:
P.s.: Ich weiß nicht, wie ich den Status auf beantwortet setzen kann....


Gäste können keinen Status verändern.


Zitat:
Wie lange hat dich das gekostet, wenn ich fragen darf? (Ich hatte schon 3-4 Stunden investiert und das hätte ich nie hinbekommen.)

Weiß ich nicht mehr, habe das nebenbei gemacht.
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 - 2024 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.