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

Fortlaufende Daten aus Matlab in .txt oder Excel auslesen

 

Elmo11
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 03.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.05.2016, 17:57     Titel: Fortlaufende Daten aus Matlab in .txt oder Excel auslesen
  Antworten mit Zitat      
Hallo,
ich habe folgendes Problem:
Ich würde gerne aus meiner Programmoberfläche die Werte aus den Editfeldern auslesen und in eine Textdatei oder Exceldatei in Tabellenform übertragen.
Die Werte in den Editfeldern erhalte ich aus Messungen mit einem Arduino.
Nach jeder Messung möchte ich durch Klick auf einen Button die Werte in eine Tabelle innerhalb eines Dokuments eintragen. Sozusagen das die Tabelle mit jedem Klick erweitert wird.

Option 1:
Ich habe mir überlegt, dass ich die Editfelder mit
Code:
s = get(handles.edit22,'String');

auslese und dann die Werte mit num2cell in Tabellenform umschreibe. Diese wollte ich dann mit dem Befehl
Code:
for i=1:1:n
     xlswrite('Dateiname.xls', Array mit Werten, 1, ['A' num2str(i)]);
end

in eine Excel Datei schreiben.
Gibt es nun eine Funktion, die mit jedem Klick die Tabelle fortführt oder muss ich über eine If Schleife jede Zeile im Excel Dokument auf Inhalt prüfen bis ich zur nächsten Leerzeile komme?

Option 2:
Ich habe hier im Forum ein Beispiel für ein neues Fenster mit Tabelle gefunden.
Code:
f = figure('Position', [100 10 800 500]);
 tab1 = uitable('Parent', f, 'Position', [15 170 768 320]);
 
complexData1 = { ...
    'Andrew' 31 'Male' 76 230.75 false 'Somewhat Frequently' 10; ...
    'Bob' 41 'Male' 77 235.5 true 'Not Very Frequently' 10; ...
    'Clarice' 20 'Female' 74 130.25 false 'Very Frequently' 15; ...
    'Debra' 35 'Female' 67 140.25 true 'Very Frequently' 15;
    'Edward' 34 'Male' 73 247.5 true 'Very Frequently' 20};


set(tab1, 'Data', complexData1);
set(tab1, 'ColumnName', {'Name', 'Age', 'Gender', 'Height', 'Weight', ...
                      'Stress|Tests', 'Exercise|Frequency', 'Copay'});
 

Gibt es einen Befehl mit dem ich diese Tabelle mit jedem Klick auf den Button fortführen kann und kann ich diese auch in Excel übertragen?

Falls jemand noch eine andere Option kennt wäre ich Ihm sehr dankbar.
Ich bin noch Anfänger in Sachen Matlab und würde mich über jede Hilfe freuen.
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: 05.05.2016, 22:07     Titel: Re: Fortlaufende Daten aus Matlab in .txt oder Excel auslese
  Antworten mit Zitat      
Hallo Elmo11,

Wenn Du die Daten an eine bestehende Excel-Tabelle anhängen möchtest, musst Du jedesmal das Excelfile neu einlesen, die Werte anhängen und dann das File wieder schreiben. Das geht mit xlsread und xlswrite . Bei einem Text-File wäre das Anhängen einfacher, weil man hier einfach ans File-Ende schreiben kann.
Eine andere Idee wäre, die Daten zunächst in Matlab zu speichern und erst bei Drücken eines Export-Buttons in ein Excel-File zu schreiben.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 03.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.05.2016, 00:43     Titel:
  Antworten mit Zitat      
Hallo Jan!
Das mit dem jedesmal wieder einlesen der Exceldaten ist eine super Idee. Darauf bin ich ja gar nicht gekommen. Very Happy

Vielen Dank dafür. Werde es morgen Abend mal probieren und melde mich dann nochmal.

LG
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 06.05.2016, 20:48     Titel:
  Antworten mit Zitat      
Elmo11 hat Folgendes geschrieben:

Das mit dem jedesmal wieder einlesen der Exceldaten ist eine super Idee.


Die Idee ist rein Laufzeitmäßig ehr schlecht.

Sinniger ist, wie Jan schon erwähnt hat, die Daten erstmal zu akkumulieren und erst am Ende oder nach zusätzlicher Anforderung ins Excel zu schreiben.
Zumal vermutlich nicht während der Datensammlung in Matlab schon auf die noch wachsenden Exceldateien zugreifen muss - oder?
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Elmo11
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 03.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.05.2016, 23:15     Titel:
  Antworten mit Zitat      
Klappt das dann auch wenn der Benutzer nur bestimmte Messungen haben will oder werden dann immer alle Messungen in Matlab gespeichert und per Klick in Excel übertragen.

Bei jeder Messung erhalte ich ca. 8 Werte die ich aus Editfeldern auslese. Mit jedem Klick auf den Button möchte ich das er genau die vorliegende Messwerte speichert. Das werden max. 10 Messungen pro Datei in einer Tabelle sein. Also großen Speicheraufwand kann man dabei dann nicht erwarten.

Ist es möglich diese in einem neuen Fenster zu den schon bestehenden Werten in einem uitable per pushbutton hinzuzufügen (ohne neues Fenster bei jedem Klick auf den Button)? Also immer per Klick eine neue Zeile mit den Messwerten.

Kann man diese dann auch direkt in eine Exceldatei schreiben oder wie geht man da am besten vor?

Vielen Dank für eure Hilfe! Bin hier echt bisschen überfordert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 08.05.2016, 14:06     Titel:
  Antworten mit Zitat      
Elmo11 hat Folgendes geschrieben:

Bei jeder Messung erhalte ich ca. 8 Werte die ich aus Editfeldern auslese. Mit jedem Klick auf den Button möchte ich das er genau die vorliegende Messwerte speichert. Das werden max. 10 Messungen pro Datei in einer Tabelle sein. Also großen Speicheraufwand kann man dabei dann nicht erwarten..

Es geht dabei auch nciht um den Speicherbedarf, sondern um die Zeit, die es braucht, aus Matlab heraus in Excel zu schreiben. Und dann nicht nur 1x, sondern scheinbar 10x.
Aber versuch es doch einfach mal aus.


Elmo11 hat Folgendes geschrieben:
Klappt das dann auch wenn der Benutzer nur bestimmte Messungen haben will oder werden dann immer alle Messungen in Matlab gespeichert und per Klick in Excel übertragen. .
[...]
Ist es möglich diese in einem neuen Fenster zu den schon bestehenden Werten in einem uitable per pushbutton hinzuzufügen (ohne neues Fenster bei jedem Klick auf den Button)? Also immer per Klick eine neue Zeile mit den Messwerten.

Kann man diese dann auch direkt in eine Exceldatei schreiben


Es geht alles, was du willst, wenn du es entsprechend programmierst.
Aber solche allgemeinen Fragen bringen dich nicht weiter.

Elmo11 hat Folgendes geschrieben:

oder wie geht man da am besten vor?

Unterteile dir dein Vorhaben in Einzelschritte und bearbeite diese.
Wenn dann konkrete Fragen kommen, schau, ob du die mit der Matlabhilfe, dem WWW oder dem Forum hier gelöst bekommst.

Also erstmal rausfinden, wie man überhaupt in Excel speichert, dann schauen, ob es ok ist, das wirklich für jede Zeile einzeln neu zu machen, ...
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Elmo11
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 03.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2016, 01:02     Titel:
  Antworten mit Zitat      
Könntet Ihr mir vielleicht ein wenig helfen, ich bekomme die Matrix einfach nicht richtig exportiert...
Egal was ich mache er speichert mir nur eine Excel Datei mit den Spaltenüberschriften und diese dann auch nicht wie in meiner Tabelle in einer Zeile sondern in einer Spalte.
Die Idee war alles erstmal in einem uitable zu erstellen und dann per Button zu exportieren.
Die ColumnName habe ich ein wenig abgespeckt, da ich den Rest nicht öffentlich posten will. Falls es wichtig ist es sind 16 Spalten.
Wo liegt mein Fehler?

Code:
f = figure('Position',[1030 157 730 780],'Name','Table: Summary of results');
 set(f, 'menubar', 'none');
 h = uitable('Parent', f,'FontSize',10, 'Position', [15 130 700 640]);
 ButtonExport=uicontrol('Parent',f,'Style','pushbutton','String','Export to Excel','Units','normalized','FontSize',16,'Position',[0.70 0.053 0.25 0.06]);
 ButtonAdd=uicontrol('Parent',f,'Style','pushbutton','String','Add','Units','normalized','FontSize',16,'Position',[0.05 0.053 0.2 0.06]);
 ButtonDelete=uicontrol('Parent',f,'Style','pushbutton','String','Delete','Units','normalized','FontSize',16,'Position',[0.3 0.053 0.2 0.06]);
 
  measuring_data = { ...
    7 1 2 3 45 5 69
    7 1 2 3 45 5 69  
    7 1 2 3 45 5 69
    7 1 2 3 45 5 69
    7 1 2 3 45 5 69 };


set(h, 'Data', measuring_data);
set(h, 'ColumnName', {'Fx (model) in [N]', 'Number of samples', 'Number of samples', 'Number of samples', 'Number of samples', 'Number of samples', 'Time interval in [s]'});


set(f,'CloseRequestFcn',@my_closereq);
set(ButtonExport,'Callback',@my_xlswrite);
set(ButtonAdd,'Callback',@my_tableadd);
set(ButtonDelete,'Callback',@my_tabledelete);



Code:
function my_xlswrite(src,evt)
%Erstellt aus den Werten in der Tabelle eine Excel Datei und speichert diese in den
%gewünschten Zielordner
global h;
Data=get(h,'Data');
ColumnName=get(h,'ColumnName');
NewData=mat2cell(Data,ones([size(Data,1) 1]));
CombData=[ColumnName ; NewData];

fileName = inputdlg('Please enter the name for your figures');
directoryName = uigetdir('','Please select a folder to save to');
  if directoryName == 0      %# User pressed the "Cancel" button...
     directoryName = '';      %#   ...so choose the empty string for the folder
  end
filePath = fullfile(directoryName,fileName{1});  %# Create the file path
xlswrite(filePath,CombData,1) %# Save the file
Private Nachricht senden Benutzer-Profile anzeigen
 
Mmmartina
Forum-Meister

Forum-Meister


Beiträge: 745
Anmeldedatum: 30.10.12
Wohnort: hier
Version: R2020a
     Beitrag Verfasst am: 12.05.2016, 09:12     Titel:
  Antworten mit Zitat      
Hast du denn mal debuggt und geschaut, was in den einzelnen Variablen gespeichert ist?
Setze dir mal einen Breakpoint zu Beginn deiner function my_xlswrite(src,evt) und schaue nach, was die Variablen machen.
Falls du nicht weißt wie: http://de.mathworks.com/help/matlab.....prog/set-breakpoints.html

Ich wette nämlich mit dir, dass 'Data' leer ist.
Code:
global h;
Data=get(h,'Data');
 

Du definierst h plötzlich global und holst dann vom gerade definierten und somit leeren(? woher sollen die Daten kommen?) h deine Daten?

Wie heißen denn deine handles?
Normalerweilse holt man sich die handles zu Beginn jeder Funktion über sowas wie:
Code:
h = get(gcf, 'Data', measuring_data)

(gcf = get current figure, schöner wäre es, den exakten figurenamen zu nutzen)

Wobei du dafür natürlich die handles in vorherigen Funktionen an dein figure gebunden haben musst.
Code:
set(gcf, 'Data', measuring_data);


Beim debuggen kannst du auch schauen, ob dein Vektor ein zeilen oder spaltenvektor ist.
_________________

LG
Martina

"Wenn wir bedenken, daß wir alle verrückt sind, ist das Leben erklärt." (Mark Twain))
Private Nachricht senden Benutzer-Profile anzeigen
 
Elmo11
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 03.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2016, 14:47     Titel:
  Antworten mit Zitat      
Okay ich probier das mal. Danke für den Tipp.

Ach mein Fehler ich habe das global h vom figure vergessen zu kopieren.
Also nochmal so sieht es bei mir aus und damit sollte es doch stimmen.
Nicht wundern habe jetzt wegen der Übersicht h in hTable umbenannt.

Code:
global hTable
 f = figure('Position',[1030 157 730 780],'Name','Table: Summary of results');
 set(f, 'menubar', 'none');
 hTable = uitable('Parent', f,'FontSize',10, 'Position', [15 130 700 640]);
 ButtonExport=uicontrol('Parent',f,'Style','pushbutton','String','Export to Excel','Units','normalized','FontSize',16,'Position',[0.70 0.053 0.25 0.06]);

...

 


Die handles habe ich doch aber in meiner Funktion mit dem Befehl get geholt oder stimmt da etwas nicht?

Code:

function my_xlswrite(src,evt)
global hTable
Data=get(hTable,'Data');
ColumnName=get(hTable,'ColumnName');
Private Nachricht senden Benutzer-Profile anzeigen
 
Elmo11
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 03.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2016, 15:00     Titel:
  Antworten mit Zitat      
Also ich habe jetzt einfach mal das Semikolon bei
Code:
Data=get(hTable,'Data')
weggelassen und bekomme dann im Command Window

Code:
Columns 1 through 11

    [5]    [5]    [5]    [5]    [5]    [5]    [5]    [5]    [5]    [5]    [5]
    [5]    [5]    [5]    [5]    [5]    [5]    [5]    [5]    [5]    [5]    [5]

  Columns 12 through 16

    [5]    [5]    [5]    [5]    [5]
    [5]    [5]    [5]    [5]    [5]


mit

Code:
measuring_data = { ...
    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5
    5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5     };



bei
Code:
ColumnName=get(hTable,'ColumnName')


erhalte ich aber

Code:
ColumnName =

    'Number of samples'
    'Time interval in [s]'
    'Number of samples'
    'Time interval in [s]'
    'Number of samples'
    'Time interval in [s]'
    'Number of samples'
    'Time interval in [s]'
    'Number of samples'
    'Time interval in [s]'
    'Number of samples'
    'Time interval in [s]'
    'Number of samples'
    'Time interval in [s]'
    'Number of samples'
    'Time interval in [s]'
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Elmo11
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 03.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.05.2016, 16:21     Titel:
  Antworten mit Zitat      
Okay habe es jetzt selbst hinbekommen. Bei der Funktion

Zitat:
CombData=[ColumnName';Data];


habe ich doch tatsächlich den Strich für das Transponieren gelöscht. Laughing

Ja diese kleinen Fehler. Trotzdem ein großes Dankeschön für eure Hilfe. Wink
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.