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 nach CSV/xls

 

geieraffe
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 97
Anmeldedatum: 19.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.07.2012, 15:10     Titel: Export nach CSV/xls
  Antworten mit Zitat      
Hallo

ich kann mir kaum vorstellen, dass noch niemand das Problem hatte, aber ich bin trotz langem Suchen noch auf keine Lösung gestoßen:

Ich möchte gerne Daten exportieren in eine Datei. CSV oder XLS ist mit erst einmal egal, ABER ...
ich möchte das File immer nur ergänzen und nicht neuschreiben.
Geht das, ohne alle alten Daten erst zu importieren, sie dann zusammen zu fügen und dann wieder neu schreiben?

XLSWRITE()
ist eigentlich ganz nett, mich stört nur, dass es immer den Excel_server starten muss. Man kann damit die Datei zwar schön erweitern, aber ich bekomme meine Zeilenanzahl nicht richtig ausgelesen:
Code:

e = actxserver ('Excel.Application');
filename = ('C:\...\file.xls');
ewb = e.Workbooks.Open(filename);
esh = ewb.ActiveSheet;

sheetObj = e.Worksheets.get('Item', 'climate');
% sollte beides die Zeilenanzahl ausgeben
num_rows = sheetObj.Range('A1').End('xlDown').Row
num_rows = sheetObj.Cells(sheetObj.Rows.Count, 1).End('xlUp').Row
 

Die erste Methode geht, aber nur bei 2 oder mehr Zeilen, sonst liefert es die Zeilenanzahl der Tabelle (ob leer oder nicht).
Die zweite Methode hab ich gefunden, erzeugt bei mir aber eigtl immer einen Fehler und ich weiß nicht was oder warum.

DLMREAD()
Funktioniert auch:
Code:

old = dlmread(file.csv', ';', 1, 0);
dlmwrite('file.csv', cell2mat(old;new),';',1,0);
 

Allerdings eben nur über das komplette Auslesen der bisherigen Datei.
Zusätzlich kommt dazu, dass man bei dieser Variante keine Header haben kann in den Spalten. Das ist aber bei mir leider nötig.

Also kennt jemand von euch eine Methode, mit der ich ein File, das ungefähr so aussehen soll:

Time | Temp | other | ... | comment
12 | 34 | 1 | ... | blalba
... | .... | .... | ... | blabla

schreiben bzw. noch besser erweitern kann?

EDIT:
in meiner hast hab ich die Option "-append" bei DLMWRITE() übersehen ...mea culpa ... das Problem ist leider, dass ich nicht vorher schon ein File mit Headern erstellen kann und das dann erweitern, wegen den KOmmentaren
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 31.07.2012, 04:39     Titel: Re: Export nach CSV/xls
  Antworten mit Zitat      
Hallo geieraffe,

Was genau bedeutet "erweitern"? Zeilen hinzufügen ist einfach, Spalten hinzufügen ist kompliziert.

Zitat:
Die zweite Methode hab ich gefunden, erzeugt bei mir aber eigtl immer einen Fehler und ich weiß nicht was oder warum.

Wann immer Du im Forum erwähnst, dass es "einen Fehler gibt", ist es eine Gute Idee, diesen zu beschreiben, am besten mit der Fehlermeldung.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
geieraffe
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 97
Anmeldedatum: 19.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2012, 09:20     Titel:
  Antworten mit Zitat      
Hey Jan,

Oh ja, sorry, mein Fehler. Aus lauter Frust hab ich den Fehler verdrängt Smile

Code:

>> num_rows = sheetObj.Range('A1').End('xlDown').Row

num_rows =

     4

>> num_rows = sheetObj.Cells(sheetObj.Rows.Count, 1).End('xlUp').Row
??? Index exceeds matrix dimensions.
 

Ich hab nur leider echt keine Ahnung welcher Index hier gemeint sein könnte, weil ich die Codezeile auch nur aus einem Forum habe.


Also eigtl heißt "erweitern" immer nur um eine Zeile erweitern, wenn die Spalten mal stehen wird da nix mehr verändert. Weißt du wie das geht?
Mit DLMREAD() und "-append" geht erweitern zwar ganz einfach, aber eben nicht mit gemischten Datentypen.
Code:

>> dlmwrite('file.csv', data, '-append', 'delimiter', ';')
??? Error using ==> dlmwrite at 114
The input cell array cannot be converted to a matrix.
 
>> cell2mat(data)
??? Error using ==> cell2mat at 47
All contents of the input cell array must be of the same data type.
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 01.08.2012, 03:00     Titel:
  Antworten mit Zitat      
Hallo geieraffe,

Wie wäre es mit FOPEN('a') und FPRINTF?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
geieraffe
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 97
Anmeldedatum: 19.04.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.08.2012, 09:08     Titel:
  Antworten mit Zitat      
Hey Jan,

im Prinzip hab ich s mir gestern jetzt so hingewurstelt, wie du wahrscheinlich meinst.
mit
Code:

fid = fopen(filename,'a')

%jede Einheit der Cell wird einzeln abgefragt
for i=1:size(data,1)
     for j=1:size(data,2)

... % hier wird jede Einheit überprüft auf string, numeric oder logical

          fprint(fid, '%s', var);
     end
end
% neue Zeile beginnen, da sonst beim nächsten Aufruf an die alte
% angehängt wird
fprint(fid, '\n');
fclose(fid);
 


Ich hatte gehofft, dass es etwas einfacher geht, aber nu gut ... so funktionierts Smile
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.