2010-06-10 26 views
13

Deseo leer archivos de un directorio y realizar una operación de forma iterativa en cada archivo. Esta operación no requiere alterar el archivo.MATLAB - ¿leer archivos del directorio?

Entiendo que debería usar un bucle for para esto. Hasta ahora se ha intentado:

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

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

El error devuelto aquí me sugiere, un novato, que la inclusión de un directorio con ls() no asigna el contenido a una estructura de datos.

segundo lugar I intentado crear un archivo que contiene en cada línea una ruta a un archivo, por ejemplo,

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

luego leí este archivo usando el código siguiente:

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

Este código lee la archivo pero crea una nueva línea donde existe un espacio en la ruta, es decir,

'C:\Documents' 
'and' 
'Setting\My' 
'Documents\MATLAB\asd.pdb' 

En última instancia, a continuación, la intención de utilizar el bucle for

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

para leer cada archivo, pero pdbread() lanza un error proclamando que el archivo es de formato incorrecto o no existe.

¿Esto se debe a la separación de nueva línea de rutas cuando se lee el archivo de ruta?

Cualquier ayuda o sugerencia muy apreciada.

Gracias, S :-)

Respuesta

21

En primer lugar obtener una lista de todos los archivos que coinciden con sus criterios:
(en este caso AP archivos en C: \ Mis documentos \ MATLAB)

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

Luego lea en un archivo de la siguiente manera:
(Aquí i puede variar entre 1 y el número de de archivos)

data = load(matfiles(i).name) 

Repita esto hasta que haya leído todos sus archivos.


Una alternativa más simple si se puede cambiar el nombre de archivos es el siguiente: -

primero guarde el reqd. archivos como 1.pdb, 2.pdb, 3.pdb, etc ...

continuación, el código para leerlos de forma iterativa en Matlab es el siguiente:

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

copio esto desde yahoo respuestas! Funcionó para mí

% 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 
Cuestiones relacionadas