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

laden/importieren von cell arrays

 

Fabian Baumgarten
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 27.08.12
Wohnort: ---
Version: R2012a 7.14.0.739
     Beitrag Verfasst am: 10.09.2012, 10:30     Titel: laden/importieren von cell arrays
  Antworten mit Zitat      
Hi.

Ich habe folgendes Problem:
Innerhalb meiner m.file soll an einer bestimmten Stelle eine Datei eingelesen werden. Um genau zu sein, sollen 2 Dateien kurz hintereinander eingelesen werden. Das macht aber glaube Ich jetzt keinen großen Unterschied.

Mein Hauptproblem besteht darin, dass Ich je nach Situation einfache Matritzen, aber manchmal auch Cell Arrays, die mehrere dieser Matritzen enthalten importieren, bzw. laden muss.

mit
Code:
Importdata('Testdatei.mat');

funktioniert das ganze Problemlos, allerdings kann Ich dann nur die Datei "Testdatei" laden. Leider heißt nunmal die Datei bei jedem nicht Testdatei und der User sollte eine entsprechende Datei aus seiner "Current Folder" auswählen können.

folgendes habe Ich probiert:
Code:
load(input('Enter file name here: ','s'));

dies gibt leider einen Struct aus, den Ich dann versucht habe mit
Code:

umzuformatieren. Leider ergibt sich aber aus dem struct ein 1x1 Cell Array, in dem dann z.b. mein 3x1 Cell Array drin steht. Logischerweise kann MATLAB dann den Cell Array nicht weiterverarbeiten.

das gleiche passiert mit dem Befehl
Code:

der gefällt mir allerdings noch am besten, weil er am benutzerfreundlichsten ist und man seinen Dateinamen nicht eintippen muss. Leider bekomme Ich beim Import eines Cell Arrays auch wieder ein struct, welches ich nach konvertierung in ein cell array wieder nicht verwenden kann, weil sich mein cell array in einem 1x1 cell array befindet.

Ich hoffe, das war halbwegs verständlich und mir kann einer sagen, wie Ich vernünftig ein beliegiges cell array, oder eben nur eine Matrix in das Programm importieren, bzw. hineinladen kann.

Danke für die Hilfe!
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: 10.09.2012, 12:07     Titel: Re: laden/importieren von cell arrays
  Antworten mit Zitat      
Hallo Fabian,

Zitat:
Code:
load(input('Enter file name here: ','s'));

Wie wäre es mit:
Code:
[fName, fPath] = uigetfile('*.mat', 'Import file');
if ischar(fName) == 0
  return;
end
data = load(fullfile(fPath, fName));

Falls die Daten dann in einem Cell Array oder Struct liegen, kann man doch einfach auf das Cell-Element oder Struct-Feld zugreifen, oder nicht?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 27.08.12
Wohnort: ---
Version: R2012a 7.14.0.739
     Beitrag Verfasst am: 10.09.2012, 12:57     Titel:
  Antworten mit Zitat      
ok, erstmal vielen Dank für die Antwort!

den Code, den du gepostet hast, werde ich mir mal nach dem Essen anschauen.

Zitat:
Falls die Daten dann in einem Cell Array oder Struct liegen, kann man doch einfach auf das Cell-Element oder Struct-Feld zugreifen, oder nicht?


Oh man! Ich stand vielleicht sowas von auf dem Schlauch! unfassbar...
Ohne es jetzt ausprobiert zu haben, denke Ich, dass somit selbst meine Lösung ohne weiteres möglich wäre, indem man - wie du ja bereits sagst - einfach auf das Cell Array zugreift. Auf sowas komme Ich natürlich wieder nicht...

Wie gesagt, vielen Dank für den Denkanstoß!

Ich gebe nach dem Essen Feedback, ob nun alles soweit passt.
Private Nachricht senden Benutzer-Profile anzeigen
 
Fabian Baumgarten
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 27.08.12
Wohnort: ---
Version: R2012a 7.14.0.739
     Beitrag Verfasst am: 11.09.2012, 13:58     Titel:
  Antworten mit Zitat      
mhm, irgendwie konnte Ich meinen Betrag nicht mehr editieren. Warum, weiß ich nicht. Evtl., weil er bereits einen Tag alt ist?!

Wie dem auch sei. also, sorry für den doppelpost und sorry, weil ich mich jetzt erst melde. mir ist leider gestern nachmittag was dazwischen gekommen. Von daher, nun das versprochene Feedback.

Habe den Code von Jan ein wenig modifiziert (nur die Variablen Namen geändert) und noch 2 Zeilen drangehängt, da die eingelesene Datei wieder ein struct war. Allerdings hat hier sehr der Denkanstoß von Jan geholfen.

Code:
[P_Name, P_Path] = uigetfile('*.mat', 'Import file');
    if ischar(P_Name) == 0      
        return;                
    end
        P = load(fullfile(P_Path, P_Name));
        P=struct2cell(P);
        P=P{1};
 


damit funktioniert es einwandfrei!

Danke nochmals.

PS: Eine Frage hätte Ich da doch noch:
Was genau passiert, wenn P_Name kein char ist, wenn man dann "return" ausführt?
sprich, was genau machen die 2 Zeilen:
Code:
if ischar(P_Name) == 0      
        return;                
 
?
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: 11.09.2012, 16:23     Titel:
  Antworten mit Zitat      
Hallo Fabian,

Beiträge kann man 2 Stunden lang editieren. Danach sind die Editoren in Notfällen gerne behilflich.

Wenn man bei UIGETFILE auf "Cancel" drückt, werden zwei Nullen zurückgeliefert. Im Sinne guter Benutzerführung muss darauf irgendwie sinnvoll reagiert werden. Ein Rücksprung in die Aufrufende Funktion ist da eine Möglichkeit.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 27.08.12
Wohnort: ---
Version: R2012a 7.14.0.739
     Beitrag Verfasst am: 12.09.2012, 13:34     Titel:
  Antworten mit Zitat      
Vielen Dank für die Hilfe und die gute Erklärung!
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.