Matlab - Leer todos los archivos de una carpeta

 
Vista:
sin imagen de perfil

Leer todos los archivos de una carpeta

Publicado por marta (19 intervenciones) el 22/02/2016 10:45:52
Buenas , quisiera que el programa me leyese todos los archivos de un misma carpeta y me guardase los datos obtenidos de la operación
Por ejemplo si yo quisiese repetir esto pero con todos los archivos que tengo en la carpeta no solo con cvgtr50_roa_ptb57.329, que estos archivos van desde cvgtr50_roa_ptb57.328-cvgtr50_roa_ptb57.357

1
2
3
4
5
6
7
8
9
10
11
12
13
fid = fopen(cvgtr50_roa_ptb57.329);
d = textscan(fid,'%*d %*s %*d %*d %*d %f %f %*d %*d %f %s');
fclose(fid);
elv1=d{:,1};
elv2=d{:,2};
dif=d{:,3};
c1=d(:,1);
i=1;
j=length(elv1);
while i<=j
elvme(i)=((elv1(i)+elv2(i))/2);
i=i+1;
end
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Daniel
Val: 269
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Leer todos los archivos de una carpeta

Publicado por Daniel (264 intervenciones) el 24/02/2016 17:00:59
Este es un código que lee el nombre de todos los archivo de una ruta detrerminada (path) que tengan una determinada extension (ext)
En el medio del codigo (donde esta comentado) iria tu programa principal. Ten en cuenta que debes guardar en alguna variable que siga al for para que no se sobre escriban los datos a guardar



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
path='C:\'; % ruta, si es la actual  poner path=pwd
ext='.pdf'; % extension, si no se desea filtrar por extension poner ext=''
 
ar=ls(path);
 for j=1:size(ar,1)
   cn=ar(j,:);
   [~,~,ex]=fileparts(cn);
    %isdir(cn)
   if (and(~isdir(fullfile(path,cn)),or(strcmpi(strtrim(ex),ext),isempty(ext))))
       disp(cn)
       %%%% aca iria el programa principal
       %%%% fid = fopen(fullfile(path,cn));
       %%%% etc
   end
 end

Comentanos como te fue

Saludos

Daniel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Leer todos los archivos de una carpeta

Publicado por marta (19 intervenciones) el 25/02/2016 10:27:14
Buenas Daniel , el objetivo de leer todos lo cumple pero me da fallo ahora en la función anterior.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
path=pwd;
ext=' ';
 
ar=ls(path);
 for j=1:size(ar,1)
   cn=ar(j,:);
   [~,~,ex]=fileparts(cn);
    %isdir(cn)
   if (and(~isdir(fullfile(path,cn)),or(strcmpi(strtrim(ex),ext),isempty(ext))))
       disp(cn)
       %promedio
d=fopen(fullfile(path,cn));
elv1=d(:,6); % el error que me da es : Attempted to access d(:,6); index out of bounds because numel(d)=1. Error in pruebadeabrirtodo (line 13)
elv1=d(:,6);
elv2=d(:,7);
dif=d(:,10);
c1=d(:,11);
i=1;
j=length(elv1);
while i<=j
elvm(i)=((elv1(i)+elv2(i))/2);
i=i+1;
end
   end
 end

La idea es que coja cada archivo haga la media de cada fila de dos columnas concretas (6 y 7) y esa media me la guarde en una copia del archivo original salvo que en lugar de dos columnas ahora este una columna con la media de cada fila. Adjunto el archivo para que veas como es
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Daniel
Val: 269
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Leer todos los archivos de una carpeta

Publicado por Daniel (264 intervenciones) el 25/02/2016 17:34:06
Aqui te paso el código completo, cuando tengas dudas de como leer un archivo porque no estas segura de la codificación te recomiendo que uses uiimport. Matlab intenta reconocer el archivo y te presenta una serie de opciones utiles. Luego, antes de importarlos ve a import selection (desplegable debajo del tilde verde) y elijas generate script. Esto genera el codigo necesario que utilizo para leerlo y podes usarlo en el futuro con otros archivos con la misma codificacion.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
path=pwd; %'C:\'; % ruta si es la actual  poner path=pwd
ext='.328'; % extension si no se desea filtrar por extension poner ext=''
 
ar=ls(path);
for j=1:size(ar,1)
    cn=ar(j,:);
    [~,~,ex]=fileparts(cn);
 
    if (and(~isdir(fullfile(path,cn)),or(strcmpi(strtrim(ex),ext),isempty(ext))))
        disp(fullfile(path,cn))
 
        filename = fullfile(path,cn);
        formatSpec = '%3f%3s%6f%7f%4f%4f%5f%12f%12f%12f%f%[^\n\r]';
        fileID = fopen(filename,'r');
        dataArray = textscan(fileID, formatSpec, 'Delimiter', '', 'WhiteSpace', '',  'ReturnOnError', false);
        fclose(fileID);
        datos = dataset(dataArray{[1:end-1]});
        clearvars formatSpec fileID dataArray ans;
 
        % las columnas 1 a 5 son las originales
        % en la columna 6 esta el promedio de las columnas 6 y 7
        % en las columnas 7 a 10 estan las antiguas columnas 8 a 11
 
        mean67=dataset(mean(double([datos(:,6) datos(:,7)]),2),'VarNames','p67');
        datos_new=[datos(:,1:5) mean67 datos(:,8:11)];
        export(datos_new,'file',strcat(filename, 'n'),'Delimiter','\t','WriteVarNames',false)
 
    end
end

el nuevo archivo se llama igual que el original salvo que con una n al final de la extension




Seguí comentandonos tus resultados

Saludos nuevamente

Daniel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Leer todos los archivos de una carpeta

Publicado por marta (19 intervenciones) el 25/02/2016 18:05:34
Vale no sale ninguna error pero el archivo "nuevo " no lo encuentro por ningún lado
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Daniel
Val: 269
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Leer todos los archivos de una carpeta

Publicado por Daniel (264 intervenciones) el 25/02/2016 19:10:05
fijate de poner

1
ext='';

para que lea todos los archivos independientemente de su extensión

Además chequea que la carpeta de trabajo ( definida en la variable path) tenga los archivos

los archivos modificados los guarda en el mismo directorio que los originales
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Leer todos los archivos de una carpeta

Publicado por marta (19 intervenciones) el 25/02/2016 20:03:09
ya miré ahí, en el de matlab original pero ... jamás aparecieron jajajaja
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar