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

mehrere excel datein einlesen und daten verarbeiten

 

der_boesi
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 07.01.11
Wohnort: Hamburg
Version: 2010b
     Beitrag Verfasst am: 07.01.2011, 16:24     Titel: mehrere excel datein einlesen und daten verarbeiten
  Antworten mit Zitat      
Schönen guten Tag.

Ich bin neu hier und auch in Matlab ein Einsteiger.
Ich habe im Studium die Aufgabe bekommen aus mehreren Excel Dateien bestimmte Werte einzulesen und zu verarbeiten. Nun habe ich hier schon ein Algorithmus gefunden der es mir ermöglicht verschieden benannte Excel Dateien einzulesen. Ich habe jetzt aber das Problem das ich nicht weiß wie ich die eingelesenen Daten speichern soll. Ich hab was von einer cell gehört aber habe nix gefunden was mir weiter helfen konnte.

Konkret zu meiner Aufgabe:
Ich muss Messwerte aus mehreren Exceldateien einlesen
daraus weitere Werte berechnen diese dann so speichern
das ich daraus dann ein Höhenlinien-Diagramm plotten kann.

Mein Problem:
Wie kann ich die Werte aus den Exceldateien so Speichern das ich daraus ein Höhenliniendiagramm zeichnen kann?

Mein Code bis jetzt schaut folgender maßen aus:

Code:


% Command Window zurücksetzen
    clc;

% Eingabe des Hubvolumens in Liter
    VH = input('Wie groß ist das Hubvolumen des Motors in Liter?');
% Eingabe der Kraftstoffdichte in
    rohk = input('Wie ist die Dichte des Kraftstoffes?');

% Auswahl des Ordners in dem die Exceldatei liegt
path = uigetdir(pwd,'Select Excel directory'); % Pfadangabe der Excelfiles
path = [path filesep];
file_all = dir(path); % alle Daten im Verzeichniss (Ordner und Files)
file = file_all([file_all.isdir] == 0); % Extraktion der Files

P = cell(1,numel(file)); % pre allocation

if ~isempty(file) % ist der Ordner leer (bzw. keine Files)?
    for k = 1:numel(file)
        [pathstr, name, ext] = fileparts([path file(k).name]); % Fileinformationen
        if strcmp(ext,'.xlsx') % ist die aktuelle file eine Excel-File?, wenn ja-->File einlesen
            P{k} = xlsread([path file(k).name]); % Einlesen der Exceldatei
           
            % Spalten auswählen
            n  = P{k}(k,1); %Drehzahl in 1/min
            md = P{k}(k,2); %Drehmoment Nm
            t  = P{k}(k,3); %Zeitmittel s
            vk = P{k}(k,5); %Kraftstoffmenge in ccm


            % Berechnung vom Effektiven Mitteldruck pe in bar
            pe = (md * 2 * pi)/(VH * 50);

            % Berechnung von der Effektiven Leistung Pe in kW
            Pe = (md .* n)./9549;

            % Berechnung Kraftstoffgewicht in g
            mk = rohk * vk;

           % Berechnung des Kraftstoffmassenstromes in g/h
           mkpunkt = mk./(t./3600);

           % Berechnung des spezifischen Kraftstoffverbrauches in g/kWh
           be = mkpunkt./Pe;

          % Plot Teilverbrauchskurve bei n
          plot(pe,be);
          grid;
        end
    end
end


% P(cellfun(@(x) isempty(x),P)) = []; % entfernen der vordefinierten Zellfelder die leer sind (falls nicht alle Files im Verzeichniss Excel Files waren)
% mat = cell2mat(P); % Umwandlung der Cell in eine Matrix (falls erwuenscht)
   

 


Für jegliche Hilfe wäre ich sehr dankbar.
Private Nachricht senden Benutzer-Profile anzeigen


Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 07.01.2011, 21:00     Titel:
  Antworten mit Zitat      
Hallo,

da ich mich von meinen Code angesprochen fuehlte versuche ich mal zu helfen, weiss aber irgendwie nicht genau wo dein Problem steckt.

Wenn du meine Einleseroutine ohne irgendwelche Erweiterungen verwendest bekommst du durch
Code:

P{k} = xlsread([path file(k).name]);
 

den Cellarray "P". Dieser enthaelt alle Werte aller Excelfiles, wobei die Werte des 1. Excelfiles in P{1}, die Werte des 2. Excelfilel in P{2} usw abgespeichert sind.
Nun kannst du einfach (wie du es auch schon gemacht hasst) mit P{}() auf Elemente zugreifen.

Ein Cellarray ist prinzipiell eine Matrix die neben numerischen auch andere Datenformate wie z.B. Strings enthalten kann.

Falls du nicht weiter kommst, so gib bitte genau an wo dein Problem liegt, eine ganze Aufgabenstellung aller "das ich daraus dann ein Höhenlinien-Diagramm plotten kann. " ist da eher weniger hilfreich.

MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
der_boesi
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 07.01.11
Wohnort: Hamburg
Version: 2010b
     Beitrag Verfasst am: 09.01.2011, 13:26     Titel:
  Antworten mit Zitat      
Moin

Okay mein Problem liegt darin das ich wenn ich das Programm durchlaufen lasse, das er nur aus dem 2. Excelfile die 3. Zeile nimmt und sonst nix. Jedenfalls zeigt er mir nichts anderes in der Workspace an.
Ich brauche "n", "pe" und "be" aber als Wert untereinander in einer Matrix.
Also z.B.

"n" | "pe" | "be"
800 | 4 | 295,1
800 | 5 | 301,5
800 | 6 | 320,16
1000 | 9 | 207,3
1000 | 4 | 250,6
1000 | 15 | 270,4
... | ... | ...

Ich weiß aber nicht wie man das in Matlab programmiert damit diese Struktur entsteht.

Des weiteren würde ich gerne wissen ob man bei der if abfrage auch 2 Dateiendungen abfragen kann da ich gerne .xls und .xlsx einlesen möchte. Ich hab schon versucht mit einem Komma das einzufügen aber bekam ich einen Fehler.

Code:
 if strcmp(ext,'.xlsx')
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 09.01.2011, 17:27     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:

Okay mein Problem liegt darin das ich wenn ich das Programm durchlaufen lasse, das er nur aus dem 2. Excelfile die 3. Zeile nimmt und sonst nix.


Dies kann ich natürlich nur schwer nachvollziehen, ohne dieses spezielle Excelfie zu kennen. Klappt es denn bei den anderen wie gewünscht? Wenn der Aufbau der Daten ("n","pe","be") in dem Excelfile genauso ist wie in deinem vorherigen Post angedeutet, so sollte nach dem Einlesen mittels xlsread ein Cellarray ausgegeben werden, der auch 3 Spalten enthält. Sind die Daten in dieser Form im Excelfile enthalten?

Am besten du liest dir einmal die Hilfe von xlsread genau durch (doc xlsread) und schaust einmal selber woran es vielleicht liegen könnte. Wenn du damit nicht weiter kommst, dann häng dieses eine Excelfile mit an einem Post an, dann kann ich mal schauen woran es liegen könnte.

Die Antwort auf deine 2. Frage ist dies:

Code:

% mit ODER Verknüpfung
 if strcmp(ext,'.xlsx') || strcmp(ext,'.xls')

% mit Cellarray, welches die gesuchten Strings enthält
txt = {'.xlsx','.xls'};
 if sum(strcmp(ext,txt));
 


MFG

Sco
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 09.01.2011, 17:28     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:

Okay mein Problem liegt darin das ich wenn ich das Programm durchlaufen lasse, das er nur aus dem 2. Excelfile die 3. Zeile nimmt und sonst nix.


Dies kann ich natürlich nur schwer nachvollziehen, ohne dieses spezielle Excelfie zu kennen. Klappt es denn bei den anderen wie gewünscht? Wenn der Aufbau der Daten ("n","pe","be") in dem Excelfile genauso ist wie in deinem vorherigen Post angedeutet, so sollte nach dem Einlesen mittels xlsread ein Cellarray ausgegeben werden, der auch 3 Spalten enthält. Sind die Daten in dieser Form im Excelfile enthalten?

Am besten du liest dir einmal die Hilfe von xlsread genau durch (doc xlsread) und schaust einmal selber woran es vielleicht liegen könnte. Wenn du damit nicht weiter kommst, dann häng dieses eine Excelfile mit an einem Post an, dann kann ich mal schauen woran es liegen könnte.

Die Antwort auf deine 2. Frage ist dies:

Code:

% mit ODER Verknüpfung
 if strcmp(ext,'.xlsx') || strcmp(ext,'.xls')

% mit Cellarray, welches die gesuchten Strings enthält
txt = {'.xlsx','.xls'};
 if sum(strcmp(ext,txt));
 


MFG

Sco
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: 09.01.2011, 18:33     Titel:
  Antworten mit Zitat      
Hallo der_boesi,

Zitat:
Okay mein Problem liegt darin das ich wenn ich das Programm durchlaufen lasse, das er nur aus dem 2. Excelfile die 3. Zeile nimmt und sonst nix.

Dann zeige uns die aktuelle Version des Programms doch mal. Wenn wir nur raten, wo Du genau eine Änderung benötigst, wird das kaum helfen.

Zitat:
Des weiteren würde ich gerne wissen ob man bei der if abfrage auch 2 Dateiendungen abfragen kann da ich gerne .xls und .xlsx einlesen möchte. Ich hab schon versucht mit einem Komma das einzufügen aber bekam ich einen Fehler.

Die beste Method um in diesem Forum exakte Hilfe zu bekommen ist es, den genauen Code und eine Kopie der Fehlermeldung zu posten. Du könntest das Komma ja an den unterschiedlichsten Stellen eingefügt haben...
"doc if" erklärt übrigens ein paar mehr Details als "help if". Es lohnt sich im Zweifel beides mal durchzulesen. Wie wäre es mit:
Code:
if strcmp(ext,'.xlsx') || strcmp(ext,'.xls')

Oder:
Code:
if any(strcmp(ext, {'.xlsx', '.xls'})

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 07.01.11
Wohnort: Hamburg
Version: 2010b
     Beitrag Verfasst am: 10.01.2011, 22:52     Titel:
  Antworten mit Zitat      
Hallo

Also die Excel Dateien liest er richtig und komplett ein.
Das Problem ist nur das er die 3 Werte die ich brauche nicht abspeichert bzw ich nicht weiß wie ich die Werte alle in der folgenden Form abspeichern kann. Also Quasi alle Werte zu einer Variable untereinander in einer Matrix um die dann weiter zu verarbeiten.

"n" | "pe" | "be"
800 | 4 | 295,1
800 | 5 | 301,5
800 | 6 | 320,16
1000 | 9 | 207,3
1000 | 4 | 250,6
1000 | 15 | 270,4
... | ... | ...

Wobei der Wert n aus den Tabellen kommt und die andren Werte jeweils berechnet werden müssen.


Zitat:
Dann zeige uns die aktuelle Version des Programms doch mal. Wenn wir nur raten, wo Du genau eine Änderung benötigst, wird das kaum helfen.


Die Aktuelle Version ist die die ich in ersten Artikel gepostet habe.
Ich hänge mal 2 von den benannten Exceldateien an damit man nachvollziehen kann wie diese aufgebaut ist.

MfG

Andreas

testwerte 1000.xls
 Beschreibung:

Download
 Dateiname:  testwerte 1000.xls
 Dateigröße:  20.5 KB
 Heruntergeladen:  549 mal
Testwerte 800.xls
 Beschreibung:

Download
 Dateiname:  Testwerte 800.xls
 Dateigröße:  20 KB
 Heruntergeladen:  428 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Sco
Forum-Meister

Forum-Meister


Beiträge: 699
Anmeldedatum: 15.08.10
Wohnort: Dundee
Version: 2008a, 2010a
     Beitrag Verfasst am: 11.01.2011, 00:56     Titel:
  Antworten mit Zitat      
Hallo,

also es war WIRKLICH nicht einfach dein Problem zu erkennen, aber nach mehrmaligen lesen aller deiner Posts habe ich nun glaube verstanden was dein Problem ist.

In deinem Code beschreibst du zwar als Kommentar "Spalten auswählen", jedoch greifst du in Wirklichkeit nur auf ein Element von "P" und nicht auf die gesamte Spalte zu!

Allgemein wird eine Spalte üeber
Code:
und eine Zeile über
Code:
eingelesen (hier am Beispiel der 1. Zeile bzw. Spalte). Du hingegen hattest
Code:
verwendet, was nur einem Element entspricht.

Somit sollte es aussreichen diesen Codeabschnitt:
Code:

% Falsch

n  = P{k}(k,1); %Drehzahl in 1/min
md = P{k}(k,2); %Drehmoment Nm
t  = P{k}(k,3); %Zeitmittel s
vk = P{k}(k,5); %Kraftstoffmenge in ccm
 

durch folgenden zu ersetzen:
Code:

% Richtig

n  = P{k}(:,1); %Drehzahl in 1/min
md = P{k}(:,2); %Drehmoment Nm
t  = P{k}(:,3); %Zeitmittel s
vk = P{k}(:,5); %Kraftstoffmenge in ccm
 


Da nun auch ein Graph gezeichnet wird, bin ich recht zuversichtlich das dies dein Problem war?

MFG

Sco
Code:
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.