2010-06-10 20 views
13

Ich möchte Dateien aus einem Verzeichnis lesen und iterativ eine Operation für jede Datei ausführen. Diese Operation erfordert keine Änderung der Datei.MATLAB - Dateien aus dem Verzeichnis lesen?

Ich verstehe, dass ich dafür eine for-Schleife verwenden sollte. Bis jetzt habe ich versucht:

FILES = ls('path\to\folder'); 

for i = 1:size(FILES, 1); 
    STRU = pdbread(FILES{i}); 
end 

Der Fehler hier zurück schlägt vor mir, ein Neuling, dass mit ls ein Verzeichnis() nicht den Inhalt auf eine Datenstruktur zuordnen.

Zweitens habe ich versucht, in jeder Zeile Erstellen einer Datei einen Pfad zu einer Datei enthalten, zB

C:\Documents and Settings\My Documents\MATLAB\asd.pdb 
C:\Documents and Settings\My Documents\MATLAB\asd.pdb 

ich diese Datei dann mit dem folgenden Code lesen:

fid = fopen('paths_to_files.txt'); 
FILES = textscan(fid, '%s'); 
FILES = FILES{1}; 
fclose(fid); 

Dieser Code liest die Datei erstellt aber eine neue Zeile, wo ein Leerzeichen in dem Pfad existiert, dh

Schließlich ich dann sollte die for-Schleife verwenden

for i = 1:size(FILES, 1) 
    PDB = pdbread(char(FILES{i})); 

jede Datei, sondern pdbread() wirft einen Fehler zu lesen, zu verkünden, dass die Datei von Fehl Format ist oder nicht existiert.

Liegt dies an der Newline-Trennung von Pfaden, wenn die Pfaddatei eingelesen wird?

Jede Hilfe oder Vorschläge stark approved.

Danke, S :-)

Antwort

21

Zuerst finden Sie eine Liste aller Dateien mit Ihren Kriterien übereinstimmen:
(in diesem Fall pdb Dateien in C: \ \ Eigene Dateien MATLAB)

matfiles = dir(fullfile('C:', 'My Documents', 'MATLAB', '*.pdb')) 

lesen Sie dann in einer Datei wie folgt:
(Hier i von 1 bis zur Anzahl variieren kann von Dateien)

data = load(matfiles(i).name) 

Wiederholen Sie dies, bis Sie alle Ihre Dateien gelesen haben.


A einfachere Alternative wenn Sie Ihre Dateien umbenennen ist wie folgt: -

zuerst die reqd speichern. Dateien als 1.pdb, 2.pdb, 3.pdb, ... etc.

der Code Dann sie iterativ lesen in Matlab wie folgt:

for i = 1:n 
    str = strcat('C:\My Documents\MATLAB', int2str(i),'.pdb'); 
    data = load(matfiles(i).name); 

% use our logic here 
% before proceeding to the next file 

end 
2

Ich kopiere diese von Yahoo Antworten! Es funktionierte für mich

% copy-paste the following into your command window or your function 

% first, you have to find the folder 
folder = uigetdir; % check the help for uigetdir to see how to specify a starting path, which makes your life easier 

% get the names of all files. dirListing is a struct array. 
dirListing = dir(folder); 

% loop through the files and open. Note that dir also lists the directories, so you have to check for them. 
for d = 1:length(dirListing) 
    if ~dirListing(1).isdir 
     fileName = fullfile(folder,dirListing(d).name); % use full path because the folder may not be the active path 

     % open your file here 
     fopen(fileName) 

     % do something 

    end % if-clause 
end % for-loop 
Verwandte Themen