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

Exceltabelle mit mehreren Datensaetzen in 1 Spalte auslesen

 

Matth1as

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2015, 11:48     Titel: Exceltabelle mit mehreren Datensaetzen in 1 Spalte auslesen
  Antworten mit Zitat      
Hallo,

das Problem ist, dass ich mehrere Messergebnisse aus einer Exceltabelle auslesen moechte. Allerdings befinden sich die Daten in der gleichen Spalte.
z.B. C2-C101, C103-C202, usw.....

Auslesen wollte ich mit xlsread. Da ich mehrere Messreihen habe aendert sich die Anzahl der Datensaetze. Also suche ich eine Moeglichkeit diese Daten auszulesen, ohne die Start-(z.B. C2) & Endzeile (z.B. C101) festzulegen (fuer den Fall, das sich die Datensatzlaenge aendert).
Zwischen den einzelnen Datensaetzen ist nur eine Leerzeile.

LG
Matthias


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 02.07.2015, 11:50     Titel:
  Antworten mit Zitat      
Zitat:
das Problem ist, dass ich mehrere Messergebnisse aus einer Exceltabelle auslesen moechte.
das hört sich nicht sehr problematisch an.
was hast du denn versucht? welche fehler sind aufgetreten`? beispielcode und beispiel daten bitte. am besten du guckst dir mal den thread aus meiner signatur an.
grüße
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Matth1as

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.07.2015, 12:03     Titel:
  Antworten mit Zitat      
Hier Teile meines bisherigern Codes
Code:

daten1 = xlsread(file_name,'Results');
daten2 = xlsread(file_name,'DataPoints');
x_hysterese1 = daten2(2:1001,2);    
y_hysterese1 = daten2(2:1001,3);
x_hysterese2 = daten2(1003:2002,2);  
y_hysterese2 = daten2(1003:2002,3);
x_hysterese3 = daten2(2004:3003,2);  
y_hysterese3 = daten2(2004:3003,3);
....
 


So muss ich aber jedes mal den Code anpassen, wenn sich etwas an den Messergebnissen veraendert. Sei es die Anzahl der Messungen oder Messergebnisse.
Ich wuerde das gerne dynamisch machen, sodass ich den Code fuer alle meine Ergebnisse anwenden kann. Sprich das die Tabelle vom Anfang bis zur ersten Leerzeile eingelesen wird und dann den naechsten Datensatz bis zur naechsten Leerzeile, bis zum Ende der Tabelle (es sind nicht immer gleich viele Datensaetze).

LG
Matthias
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 02.07.2015, 12:14     Titel:
  Antworten mit Zitat      
hab grade keine excel installiert aber erstmal überschreibst du immer wieder deine daten... du kannst dur also die hälfte deiner dinger da spaaren. außerdem war mir so das leere felder nan enthalten. die kannst du also suchen. falls nicht soltle aber etwas in den raw rückgabe argumenten von xlsread auftauchen.
außerdem ist mir aufgefallen das du einen index im namen versteckst. sowas ist sehr schlecht und sollte unbedingt vermieden werden.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Matth1as

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.07.2015, 12:28     Titel:
  Antworten mit Zitat      
ich habe jetzt nochmal etwas ausprobiert, komme aber immer noch nicht weiter

Code:

j=1;
for k=1:1:20000
    daten{j:k} = xlsread('testtabelle','Tabelle1',['A' num2str(k): 'A' num2str(k)]);
    if(strcmp(daten{j:k},'NaN'))
        daten{j:(k+1)} = xlsread('testtabelle','Tabelle1',['A' num2str(k+1): 'A' num2str(k+1)]);
        if(strcmp(daten{j:(k+1)},'NaN'))
            break;
        end
        j = j+1;
    end
end
 


das klappt allerdings nicht.
Mein Plan war es jede Zelle einzeln auszulesen und wenn man auf eine Leerzeile trifft, den naechsten Datensatz in eine neue Zeile oder Spalte der Matrix "daten" zu speichern. Und das bei 2 aufeinander folgenden Leerzeilen das einlesen beendet wird.

Nur leider bin ich mit Matlab noch zu unerfahren um den Code dafuer richtig hinzu bekommen.
Wuerde mich ueber Hilfe freuen.

LG
Matthais
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 07.07.2015, 12:43     Titel:
  Antworten mit Zitat      
nan ist kein string sondern der wert nan
dafür gibt es den befehl isnan
ohne beispieldaten und code der den fehler reproduziert muss man einfach zu viel raten. ich könnte selber irgendwelche beispieldaten generieren und damit dann arbeiten aber das ist eignedlich deine aufgabe.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Matth1as

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.07.2015, 13:09     Titel:
  Antworten mit Zitat      
ok im Anhang findest du meine Testtabelle.

ich habe jetzt den strcmp befehl durch den isnan befehl ausgetauscht.

Ich bekomme folgende Fehlermeldung:
Error using xlsread (line 247)
Data range 'A123456789:;<=>?@A1' is invalid.

Error in test2 (line 6)
daten{j:k} = xlsread('testtabelle','Tabelle1',['A' num2str(k): 'A' num2str(k)]);


LG
Matthias

testtabelle.xls
 Beschreibung:

Download
 Dateiname:  testtabelle.xls
 Dateigröße:  17.5 KB
 Heruntergeladen:  342 mal
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 07.07.2015, 13:19     Titel:
  Antworten mit Zitat      
Code:
A=xlsread('testtabelle.xls','A:A');
idnan=find(isnan(A));
idnan=[0,idnan',size(A,1)+1];
for k=1:numel(idnan)-1
    daten{k}=A(idnan(k)+1:idnan(k+1)-1);
end

so würde ich das machen denke ich.
grüße
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Matth1as

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.07.2015, 14:09     Titel:
  Antworten mit Zitat      
danke das klappt soweit.

nur wenn ich den Code ausfuehre und danach daten aufrufe erhalte ich:
>> daten

daten =

[5x1 double] [5x1 double] [5x1 double]

Wenn ich jetzt die Datenbloecke in irgendeiner Art und Weise plotten moechte,
kann ich dann wie auf die Daten zugreifen? Mit dem Befehl
>> daten(1)

ans =

[5x1 double]
bekomme ich nur das Ergebniss

LG
Matthias
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 07.07.2015, 14:16     Titel:
  Antworten mit Zitat      
http://de.mathworks.com/help/matlab.....data-in-a-cell-array.html
die daten sind in einem cell array gespeichert.
Code:

_________________

richtig Fragen
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.