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

Einlesen aller Dateien aus einem Ordner

 

nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.320
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 28.08.2008, 13:51     Titel:
  Antworten mit Zitat      
Hi,

wenn Du
Code:
so benutzt hast Du auch anderen Krempel als Dateien in der Liste, Du könntest dann z.B. prüfen, ob ein bestimmtes Element auch wirklich eine Datei ist, bevor Du versuchst es zu öffnen:
Code:
clear all;
clc;
pfad = 'blablub';
liste = dir(pfad);
files = {liste.name};
for k=1:numel(files)
    if ~isdir(files{k})
        fid = fopen(fullfile(pfad,files{k}),'r');
        daten{k} = textscan(fid,'%s');
        fclose(fid);
    end
end

Oder vorher alles aus der Liste entfernen, was ein Verzeichnis ist...
Siehe
Code:

_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden


starter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2008, 14:49     Titel:
  Antworten mit Zitat      
Danke für die eifrige unterstüzung...
"Ich" komm immer näher.
Die Sache ist nur, dass ich jetzt diese Files nicht öffnen kann.
Hab schon alles mögliche mit
Code:
ausprobiert.
Statt zwei stattlichen Spalten mit etwa 50 Zeilen (so siehts aus, wenn ich die Files mit "File->Import Data" hochlade) ist mein Ergebnis für "daten(i)" (i=1,2...) nur "(1x1 cell)".
übrigens mein fid = 3, sollte dies nicht zw. -1 u. 2 sein?

Grüße nochmal, starter
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.320
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 28.08.2008, 15:08     Titel:
  Antworten mit Zitat      
Hi,

fid=3 ist schon in Ordnung, 1 und 2 sind schon vorbelegt, -1 hieße, dass die Datei nicht geöffnet werden konnte.

Wenn Du zwei Spalten mit Zahlen hast nimm

Code:
daten{k} = textscan(fid,'%n %n');


Die Daten liegen jetzt als sogenannte
Code:
vor,
Du kannst z.B. so auf die Daten der 2. Datei zugreifen und die zweite Spalte über der ersten plotten:
Code:
plot(daten{2}{:,1},daten{2}{:,2})

_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
starter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.08.2008, 15:45     Titel:
  Antworten mit Zitat      
Juhuuuu!
Danke...
...wenn du mir deine Adresse gibst- lass ich dir eine Packung Schockokekse zukommen! Wink

Vielen Dank!
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 28.08.2008, 15:49     Titel:
  Antworten mit Zitat      
Na, da lohnt es sich doch, sich anzustrengen! Very Happy Schade, dass ich für diese Frage zu spät gekommen bin. Sad

Trotzdem herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.320
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 28.08.2008, 15:53     Titel:
  Antworten mit Zitat      
Bijick, wir können die Kekse gern teilen Very Happy

U.U. lohnt es sich, die Dateiauswahl auf bestimmte Endungen einzuschränken.
Im Beispiel etwa:
Code:
liste = dir([pfad '*.dat']);

_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Kia
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2011, 14:20     Titel:
  Antworten mit Zitat      
Ich habe folgendes Problem wenn ich den Code ausführen möchte
Zitat:
??? Error using ==> textscan
Invalid file identifier. Use fopen to generate a valid file
identifier.


die Dateien, die ich einlesen möchte haben die Formate *.txt bzw. *.mat, wurden mit Matlab erzeugt und beinhalten ausschließlich Zahlen (ich glaube Double) als Vektoren bzw. Matrizen!

kann jemand mir einen Tipp geben bitte, wie ich diese DAten einlesen kann?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 13.01.2011, 14:57     Titel:
  Antworten mit Zitat      
Hallo Kia!

Vor dem TEXTSCAN muss man zuerst FOPEN auführen, um einen File Identifier zu erhalten.

Aber wenn du sagst, dass deine TXT-Dateien nur aus Zahlen bestehen und du willst auch MAT-Dateien damit aufmachen, würde ich versuchen direkt LOAD zu verwenden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Kia
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2011, 15:04     Titel:
  Antworten mit Zitat      
Hallo Denny,
danke für deine Schnelle Antwort

fopen ist in meine Code auch vorhanden
mit Load öffne ich die Mat-DAteien zurzeit ja auch, aber wie kann ich sie alle in einem Schlag öffen? wenn ich so mache
Code:
?path = 'C:\...\...\Documents\MATLAB\Testdaten';
liste = dir(path);
files = {liste.name};
for k=1:numel(files)
    % einlesen der Dateien
    fid = fopen(fullfile(path,files{k}),'r');
    daten{k} = load(fid, '%d');
    fclose(fid);
end

dann bekomme ich folgende Fehlermeldung

Zitat:
??? Error using ==> load
Argument must contain a string.

Error in ==> Einlesen at 8
daten{k} = load(fid, '%d');
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 13.01.2011, 15:29     Titel:
  Antworten mit Zitat      
1) PATH ist reservierter Variablenname, deswegen nutze anderen Namen stattdessen.

2)FOPEN und FCLOSE für LOAD sind nicht nötig

3) Variable daten vorreservieren.
Code:

% pfad = 'C:\...\...\Documents\MATLAB\Testdaten';
liste = dir(fullfile(pfad,'*.*t'));
files = {liste.name};

daten = cell(size(files))
 
for k=1:numel(files)
    % einlesen der Dateien
     daten{k} = load(fullfile(pfad,files{k}));
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Kia
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2011, 16:53     Titel:
  Antworten mit Zitat      
1000 Dank!
das funktioniert bestens!

nun habe ich eine weitere Frage!
ich möchte diese Dateien die ich nun eingelesen habe (Ergebnis als "Cell" vorliegend) in einer Matrix "zusammenfassen". Ich habe m Dateien,die jeweilsi aus einem Vektor mit der Dimension [n x 1] bestehen. Die Matix soll dann die Dimension [n x m] haben. Wie kann ich eine Cell-Variable in einer Matrix umwandlen? ich habe zwar den Befehl
deal gefunden, aber irgendwie funktioniert es nicht, wenn meine m variiert!
Code:
[Y1, Y2, Y3, ...] = deal(X)
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 13.01.2011, 17:10     Titel:
  Antworten mit Zitat      
Schau dir Funktion CAT oder HORZCAT
Private Nachricht senden Benutzer-Profile anzeigen
 
Kia
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.01.2011, 17:56     Titel:
  Antworten mit Zitat      
ich bins nochmal!

also soweit ich verstanden habe, fassen cat bzw. horzcat (und auch vertcat) mehere Matrizen zsuammen! Ich habe meine Daten hier aber als [1 x 10] cell (ich habe 10 Dateien eingelesen), wenn ich die Daten mit dem o.g. Code importiere, wobei (komischerweise) jede "zelle" aus ein Struct besteht. In diesem Struct ist widerrum ein Vektro mit der Dimenstion [1000 x 1].

Würde in jeder Zelle anstatt struct double stehen könnte ich ja sofort mit cell2mat die Daten als matrix mit der Dimension [ 1000 x 10] zusammenfassen. aber so kriege ich, wenn ich cell2mat erstmal ein struct der Dimension [1 x 7] (7x struct).

Any Ideas???
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: 14.01.2011, 12:51     Titel:
  Antworten mit Zitat      
Hallo Kia,

Zitat:
aber so kriege ich, wenn ich cell2mat erstmal ein struct der Dimension [1 x 7] (7x struct).

Und was möchtest Du genau erreichen? Vielleicht die Werte eines bestimmten Feldes dieser Structs als Matrix verbinden?
Code:
x(1).data = rand(1,10);
x(2).data = rand(1, 10);
M = cat(1, x.data);  % oder auch "cat(1, x(:).data)"

Hilft das? Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Kia
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 89
Anmeldedatum: 02.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.01.2011, 13:10     Titel:
  Antworten mit Zitat      
Hallo Jan,

Ich habe eine Variable als Cell, die wiederum aus 1 x 7 Struct besteht. in jeder dieser Struct ist ein Vektor mit der Dimension [n x 1] als double vorhanden. Ich möchte eine Matrix als double bekommen die 7 Spalten hat (entspricht der Anzahl der struct in der Cell) und jede Spalte dieser Matrix soll die Werte eines Vektors beinhalten (Entspricht dem Inhalt einer Struct)
Mein Problem ist eher die Werte (Vektoren) aus dieser Cell zu extrahieren!
Zusammenfassen kann man die ja man mit cat machen!

EDIT:
habs hinbekommen! ich weiss zwar nicht ob es einfacher gehen würde aber ich mache es wie folgt
Code:
pfad = 'C:\...s\...\...\MATLAB\Testdaten';
liste = dir(fullfile(pfad,'*.*t'));
files = {liste.name};

daten = cell(size(files));
 
for k=1:numel(files)
    % einlesen der Dateien
     daten{k} = load(fullfile(pfad,files{k}));
end

x=cell2mat(daten);

for n=1:k          
    Y{n}=x(1,:).data;
end
a=cell2mat(Y);
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3  Weiter

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.