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

Cell Arrays - Verwechselung Spalte und Reihe

 

Bubi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2013, 22:40     Titel: Cell Arrays - Verwechselung Spalte und Reihe
  Antworten mit Zitat      
Hallo zusammen,

ich bin noch recht frisch in MATLAB und beschäftige mich gerade damit .csv Dateien einzulesen, die sowohl aus Zahlen als auch aus Strings bestehen.
Ich nutze dafür die textscan Funktion. Die einzulesenen Daten aus data.csv sind die Folgenden:

Code:
FirstName   FamilyName   Sex   Age   Condition   Time   Hits   FA   PosX   PosY   Calib
Sally           Barker   f   21   Level1   38.38   45   1   245   112   Good
Joe           Comeno   m   23   Level2   37.01   60   0   456   118   Good
Bill           Francis   m   22   Level3   34.9           37   1   553   97   Poor
Matt           Damon   m   26   Level1   39.5           61   0   382   121   Good
Carla           Brownie   f   22   Level2   40.09   59   0   372   117   Failed
Sunny   Hill           f   24   Level3   36.76   50   2   401   110   Good


Mit dem folgenden Code kann ich ganz ohne Probleme die Überschriften speichern.

Code:
function Header = test
fid = fopen('data.csv');
C = textscan(fid,'%s',1);
fclose(fid);
temp = regexp(C{:},';','split');
Header = [temp{1}(1:1:length(temp{1}))]
end


Durch den Aufruf von
Code:
Header = [temp{1}(1:1:length(temp{1}))]
wird die erste Zeile zellenweise ausgelesen.

Allerdings verwirrt es mich, wenn ich Felder auf andere Weise erzeuge und auslese.

Ein Beispiel hierfür:

Code:
function Zelle = test2
Problem = cell(3,3);
Problem{1,1}='hallo';
Problem{1,2}=[1 2 3];
Problem{1,3}='du';
Problem{2,1}='ich';
Problem{2,2}=[4 5 6; 7 8 9];
Problem{2,3}='er';
Problem{3,1}='sie';
Problem{3,2}='es';
Problem{3,3}=[10 20 30; 40 50 60; 70 80 90];
inhalt = [Problem{3,3}(1:1:length(Problem{3,3}))]
end
 


Als inhalt bekomme ich hier die erste Spalte der Zelle{3,3} zurück. Wiese wird nicht zeilenweise wie im ersten Bsp. gelesen?


Vielen Dank schonmal.


Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.04.2013, 21:17     Titel:
  Antworten mit Zitat      
mit
Code:
Header = [temp{1}(1:1:length(temp{1}))]

wird nichts ausgelesen, das wird schon mit textscan gemacht.
Es ist nur eine ziemlich umständliche Art, den ersten Eintrag eines Cell-Arrays in Header zu schreiben.
Code:
Header = temp{1};
tut das selbe.

Code:
inhalt = [Problem{3,3}(1:1:length(Problem{3,3}))]
ist nur eine sehr komplizierte Art
Code:
inhalt = Problem{3,3}(1:3);
zu schreiben, das einfach die ersten 3 Einträge kopiert. Da matlab spaltenweise Matrizen aufbaut, ist das eben die erste Spalte.
Private Nachricht senden Benutzer-Profile anzeigen
 
bubi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2013, 12:21     Titel:
  Antworten mit Zitat      
Danke für deine Antwort.

Ich habe es extra den umständlicheren Weg gewählt, da mein eigentliches Problem auch komplexer ist und ich hier die Inhalte vereinfachen musste.

Ich glaube, ich muss nochmal an einer anderen Stelle nachhaken:


Code:
C = textscan(fid,'%s',1);


textscan übergibt den Inhalt der Dateien in das Feld C.
Verstehe ich es richtig, dass dabei der Inhalt in Zelle 1,1 des Feldes Cgeschrieben wird?


Code:
temp = regexp(C{:},';','split');


regexp separiert den Inhalt von C, der durch Semikolon getrennt ist, in eigene Zellen und speichert den Inhalt in die Matrix temp, wobei das Argument C{:} die Anweisung gibt, den gesamten Inhalt von C zu verwenden?


Code:
Header = temp{1};


Nun wird die erste Zeile von temp in Header gespeichert. Wenn temp eine Matrix in Zelle 1,1 vom Feld C ist, dann müsste die Matrix doch auch spaltenweise ausgelesen werden? Wo ist mein Denkfehler?

Grüße!

Zusammengefasst: Der Inhalt der
 
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.