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

xls Datei erstellen

 

jonny65
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 75
Anmeldedatum: 15.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2013, 13:14     Titel: xls Datei erstellen
  Antworten mit Zitat      
Hallo liebe Forengemeinde,

ich habe ein Programm geschrieben, indem ich eine Funktion auswerte.
So sieht mein Code aus:

Code:
function peakauswerten_Callback(hObject, eventdata, handles)
% hObject    handle to peakauswerten (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
global Startwert Endwert S Startwert_double Endwert_double x
Startwert = get (handles.Startwerteingabe, 'String')
Endwert = get (handles.Endwerteingabe, 'String')
Startwert_double = str2double(Startwert)
Endwert_double = str2double(Endwert)

if isempty(S)
    Plotfehler
end

if isempty(Startwert)|| isempty(Endwert)
          Fehlermeldung
   
else
    y=max(S((Startwert_double:Endwert_double),2))
    y1=y+50    
    figure(1)
    plot(S(:,1),S(:,2))
    grid
    axis([Startwert_double Endwert_double 0 y1]);
   
    fxt= @(para,x)  para(1)/((2*pi*para(2)).^(0.5))*exp((-0.5*(x-para(3)).^2)/(para(2).^2));
    xdata=S((Startwert_double:Endwert_double),1);
    ydata=S((Startwert_double:Endwert_double),2);  
    x0=rand(1,3)
    [x, resnorm]=lsqcurvefit(fxt,x0,xdata,ydata)
   
   
   
    fid=fopen('Daten.xls','w');
    fprintf(fid,'%s\t','Startwert', 'Endwert', 'A','s','xc');
    fprintf(fid,'\n');
    fprintf(fid,'%g\t',Startwert_double, Endwert_double, x(1), x(2), x(3));
    fprintf(fid,'%n');
    fclose(fid);
     
   
end


Die Daten werden zum Schluss in eine xls-Datei geschrieben. Diesen Vorgang möchte ich beliebig oft wiederholen können, ohne das die Daten in der xls Datei verloren gehen. Außerdem sollen die neuen Werte in der Datei übernommen werden, sodass für jeden Durchlauf Werte festgehalten werden. Ich weiß´nicht, wie ich das realisieren soll. Wenn der Code einmal durchlaufen ist, drückt man auf einen Button ''nächster Peak'' und man muss wieder einen neuen Start und Endwert eingeben. Ich war am überlegen, ob ich eine Schleife drum rum bastel, allerdings funktioniert das nicht, da man ja immer wieder aus Funktion raus gehen muss(Button drücken). Kann mir hier jemand weiter helfen. Ich hoffe man versteht so ungefähr mein Problem, weiß gerade nicht wie ich es besser beschreiben soll.

Vielen Dank für Tipps und Anregungen.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen


jonny65
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 75
Anmeldedatum: 15.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2013, 13:57     Titel:
  Antworten mit Zitat      
Ich versuche es gerade indem ich eine variable k hochzählen lasse.
k ist beim ersten mal 1.
Wie kann ich Matlab sagen das er erst in der k-ten Zeile anfangen soll zu schreiben? In der Zeile sollen diese Werte enthalten sein.

Code:
fprintf(fid,'%g\t',Startwert_double, Endwert_double, x(1), x(2), x(3))


Grüße
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: 03.06.2013, 14:13     Titel: Re: xls Datei erstellen
  Antworten mit Zitat      
Hallo jonny65,

Ich verstehe die Frage nicht ganz. Dein "Excel"-File ist ein Tab-separiertes File, richtig? Dann kannst Du neue Daten am ende anhängen. Aber in einer bestimmten Zeilen oder Spalte anfangen ist nicht möglich.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 75
Anmeldedatum: 15.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2013, 14:19     Titel:
  Antworten mit Zitat      
Hallo Jan,

ich habe eine Excel-Datei. Diese wird beim ersten Mal beschrieben, indem die erste Zeile mit Wörtern beschrieben wird, die jeweils mit einem Tab getrennt sind. Darunter werden dann die Werte gespeichert, für einen Druchgang. Auch mit Tab getrennt. Jetzt gebe ich neue Start und Endwerte ein, die alten werden überschrieben. Jedoch sind sie in der Excel-Datei noch gespeichert. Diese neuen Werte möchte ich jetzt eine Zeile darunter haben. Also praktisch Zeile 1 die Wörter, Zeile 2 die ersten Werte, und Zeile 3 die aktuellen Werte. Hoffe das wurde verständlicher, weiß leider nicht, wie ich das besser beschreiben soll.

Grüße
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: 03.06.2013, 14:30     Titel:
  Antworten mit Zitat      
Hallo jonny65,

Obwohl Excel aus Gründen der Rückwärtskompatibility immer noch TAB-Separierte Dateien mit der Extension ".xls" direkt lädt, handlet es sich dabei trotzdem nicht um "Excel"-Daten, sondern es sind Text-Dateien, die man genauso gut auch mit dem Matlab-Editor öffnen kann.

Zitat:
Jetzt gebe ich neue Start und Endwerte ein, die alten werden überschrieben. Jedoch sind sie in der Excel-Datei noch gespeichert.

Das verstehe ich nicht. Wieso sind die Werte noch vorhanden, obwohl sie überschrieben worden sind?!
Möchtest Du Zeilen in ein Text-File einfügen?
Dann musst Du das gesamte File ins RAM-Einlesen, in einen Cell-String umformen, die Zeile einfügen und das File wieder schreiben. Das ist sehr zeitraubend und der Aufwand steigt quadratisch mit der Anzahl der Zeilen.
Massive viel schneller wäre es, die Zilene zunächst unten anzuhängen und die datei erst ganz zum Schluß einmalig "umzudrehen".

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 75
Anmeldedatum: 15.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2013, 14:40     Titel:
  Antworten mit Zitat      
Hallo Jan,

ich verstehe nicht so ganz, was du geschrieben hast. Ich versuche nochmal kurz mein Problem besser zu beschreiben.

Mit diesem Code beschreibe ich meine Datei:

Code:

    fid=fopen('Daten.xls','w');
    fprintf(fid,'%s\t','Startwert', 'Endwert', 'A','s','xc');
    fprintf(fid,'\n');
    fprintf(fid,'%g\t',Startwert_double, Endwert_double, x(1), x(2), x(3));
    fprintf(fid,'%n');
    fclose(fid);


Der benutzer gibt einen Start und Endwert ein, das x wird berechnet und anschließend dann in meiner Excel Datei gespeichert. Das sieht dann so aus:

Startwert Endwert A s xc
2500 3000 0.02 0.52 0.68

Dies wird dann in der Excel-Datei abgespeichert und bleibt da auch drin.
Jetzt wird die Funktion nochmal ausgeführt. Der Benutzer gibt einen anderen Start und Endwert ein. Es werden neue x werte berechnet und die alten Dateien in Matlab überschrieben. Im Moment werden dann auch meine Excel Liste überschrieben, ich will aber das die neuen Daten dann darunter stehen. Also so:

Startwert Endwert A s xc
2500 3000 0.02 0.52 0.68
3600 4000 .... ..... .....

Ich hoffe es ist jetzt besser rübergekommen. Sry, aber steh im Moment echt aufn Schlauch.

Grüße
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: 03.06.2013, 15:08     Titel:
  Antworten mit Zitat      
Hallo jonny65,

Ja, ich hatte Dich wohl nicht richtig verstanden. Unten an eine Datei anhängen ist einfacher:
Code:

if exist('Daten.xls', 'file') == 0  % Falls die datei noch nicht existiert:
    fid = fopen('Daten.xls', 'w');
    fprintf(fid,'%s\t', 'Startwert', 'Endwert', 'A', 's', 'xc');
    fprintf(fid, '\n');
else
    fid = fopen('Daten.xls', 'a');  % Append
end
if fid == -1  % catch errors!
  error('Cannot open file!');
end

fprintf(fid,'%g\t',Startwert_double, Endwert_double, x(1:3));
fprintf(fid,'%n');
fclose(fid);

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 75
Anmeldedatum: 15.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.06.2013, 15:21     Titel:
  Antworten mit Zitat      
perfekt. Vielen Dank Jan!
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.