Matlab - bucle para abrir varios archivos en matlab

 
Vista:
sin imagen de perfil
Val: 23
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

bucle para abrir varios archivos en matlab

Publicado por alberto (8 intervenciones) el 10/12/2020 21:03:56
hola,

estoy trabajando con unos archivos que tienen una parte del nombre en común (se corresponde con una fecha), luego un número correlativo (se corresponde con el número de medida) y finalmente una parte que es distinta en cada archivo (es el nombre del punto).

La cuestión es que necesito crear un bucle que me lea todos esos archivos y que los exporte a un formato de excel (.xlsx, por ejemplo).

He intentado varias opciones pero no he tenido éxito. ¿Alguien podría ayudarme? Se lo agradezco mucho.

Adjunto parte del script y 2 de los archivos.

Gracias!

Saludos
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 JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

bucle para abrir varios archivos en matlab

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 11/12/2020 00:00:15
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
>> nombres=ls('*.asc')
 
nombres =
 
  3×75 char array
 
    '6969_2020_11_23_0001_INT-17_filtrado_alineado_sec_termal_looped_derived.asc'
    '6969_2020_11_23_0002_T200-5_filtrado_alineado_sec_termal_looped_derived.asc'
    'data.asc                                                                   '
 
>> nombres(1,:)
 
ans =
 
    '6969_2020_11_23_0001_INT-17_filtrado_alineado_sec_termal_looped_derived.asc'
 
>> nombres(2,:)
 
ans =
 
    '6969_2020_11_23_0002_T200-5_filtrado_alineado_sec_termal_looped_derived.asc'
 
>> nombres(3,:)
 
ans =
 
    'data.asc
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
Val: 23
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

bucle para abrir varios archivos en matlab

Publicado por alberto (8 intervenciones) el 12/12/2020 10:07:41
Muchas gracias por su respuesta!

funciona perfectamente pero no consigo lo que necesito y es que creo que no he sabido explicarme bien. Adjunto el script entero por si facilita las cosas.

La cuestión es que necesito hacer un filtrado de datos, que es el mismo para todos los archivos. Lo que necesito es que ese filtrado, lo aplique a cada uno de los archivos.

Se que necesito un bucle for que vaya recorriendo cada archivo y aplicándole ese filtrado, pero no se como estructurarlo.

Adjunto 2 archivos de ejemplo:
6969_2020_11_23_0002_T200-5_filtrado_alineado_sec_termal_looped_derived.asc
6969_2020_11_23_0001_INT-17_filtrado_alineado_sec_termal_looped_derived.asc

y el script completo con el filtrado para el primero de los archivos
filtradoCTD.m

lo que me gustaría conseguir es que lo vaya aplicando a cada uno de esos archivos, cuyo nombre coincide en la parte inicial (fecha) y la parte final (_filtrado_alineado_sec_termal_looped_derived.asc).

espero haber podido explicarme mejor y agradezco enormemente vuestra ayuda.

muchas gracias,

saludos,
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
Val: 23
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

bucle para abrir varios archivos en matlab

Publicado por alberto (8 intervenciones) el 12/12/2020 11:07:46
creo que los tiros irían por aquí, pero necesito que salga un resultado para cada archivo, y de esta manera solo está cogiendo el primero de los archivos. Probablemente el fallo esté aquí (estructura_datos=importdata(archivos(1,:)); ) pero no se como solucionarlo.

gracias por vuestro apoyo!

close all
clear
clc
archivos=ls('*.asc'); %crea una lista con los archivos .asc
for i=1:length(archivos(:,1)) %bucle que recorra los archivos
estructura_datos=importdata(archivos(1,:));
datos=estructura_datos.data;
ordenado_por_profundidad=sortrows(datos,1); %ordeno por profundidad ascendente
posicion_datos_erroneos=find(ordenado_por_profundidad(:,19)==-9.990e-29); %localiza flags erróneos
ordenado_por_profundidad(posicion_datos_erroneos,:)=[]; %elimina filas donde hay flag erróneo
posicion_menor_1m=find(ordenado_por_profundidad(:,1)<1); %localiza posiciones <1m
ordenado_por_profundidad(posicion_menor_1m,:)=[]; % elimina filas con profundidades <1 m
ordenado_por_profundidad(:,[3 4 17 18])=ordenado_por_profundidad(:,[17 18 3 4]); %corrijo la salinidad
ordenado_por_profundidad(:,[13:15 17 18 19])=[]; %elimino columnas que no me interesan
end
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
Val: 23
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

bucle para abrir varios archivos en matlab

Publicado por alberto (8 intervenciones) el 12/12/2020 22:44:15
muchas gracias! no caí en ver el fallo. Estoy un poco oxidado en Matlab y lo he retomado recientemente.

voy a seguir trabajando en este script.

muchísimas gracias de nuevo!

saludos!
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
Val: 23
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

bucle para abrir varios archivos en matlab

Publicado por alberto (8 intervenciones) el 14/12/2020 19:39:40
buenas tardes,

he avanzado bastante en mi código y ya lo tengo casi listo, pero llevo varios días atascado en el final y no logro ver la luz...

lo que necesito es crear un archivo que contenga un encabezado con las columnas que me interesan (Prof., Tª, Sal...) y bajo de cada columna sus datos correspondientes.

Necesito hacer eso para cada uno de los 2 archivos que tengo en mi bucle.

Problemas que se me generan:
Al insertar con la función fprintf, parece que el encabezado se inserta bien. Sin embargo, los datos numéricos se insertan en una fila y no en columnas como su matriz original (ordenado_por_profudidad) y soy incapaz de solucionarlo. (fila 20 y 21 del código)

El segundo problema es que quiero que me genere un archivo tipo .xlsx por cada matriz y al recorrer el bucle, solo me lo genera para el último archivo. (además, pruebo con la función xlswrite y me convierte en .csv y no en .xls, aunque aún así creo que me valdría) (fila 18 del código, aunque lo tengo en %comment)

He hecho muchas pruebas y creo que estoy cerca pero me falta un empujoncito. Ojalá alguno de ustedes pueda echarme un cable.

Muchas gracias por su ayuda.

Adjunto código y archivos de nuevo.

Gracias!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
close all
clear
clc
archivos=ls('*.asc'); %crea una lista con los archivos .asc
 
for i=1:length(archivos(:,1)) %bucle que recorra los archivos
estructura_datos=importdata(archivos(i,:));
datos=estructura_datos.data;
ordenado_por_profundidad=sortrows(datos,1); %ordeno por profundidad ascendente
posicion_datos_erroneos=find(ordenado_por_profundidad(:,19)==-9.990e-29); %localiza flags erróneos
ordenado_por_profundidad(posicion_datos_erroneos,:)=[]; %elimina filas donde hay flag erróneo
posicion_menor_1m=find(ordenado_por_profundidad(:,1)<1); %localiza posiciones <1m
ordenado_por_profundidad(posicion_menor_1m,:)=[]; % elimina filas con profundidades <1 m
ordenado_por_profundidad(:,[3 4 17 18])=ordenado_por_profundidad(:,[17 18 3 4]); %corrijo la salinidad
ordenado_por_profundidad(:,[13:15 17 18 19])=[]; %elimino columnas que no me interesan
files=genvarname(['6969_2020_11_23_',num2str(i)]);
eval([files,'=ordenado_por_profundidad']); %saco lo que me interesa
%xlswrite('6969_2020_11_23_.xlsx',ordenado_por_profundidad,'sheet1','A2'); %lo convierto a excel
fileID = fopen('datos finales','w');
fprintf(fileID,'%15s %15s %15s %15s %15s %15s %15s %15s %15s %15s %15s %15s %15s\n','Prof.','Tª()','Sal','Sigma-t00','Clorofila','Turbidez','Ox. dis Mg/l', 'Ox. dis. PS','CroilflTC0','Par','Ph','C0uS/cm','TimeJ');
fprintf(fileID,'%3.4f %3.4f',ordenado_por_profundidad);
fclose(fileID);
end
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 JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

bucle para abrir varios archivos en matlab

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 14/12/2020 20:06:14
1
fprintf(fileID,'%15.4f %15.4f%15.4f %15.4f%15.4f %15.4f%15.4f %15.4f%15.4f%21.4f %15.4f%15.4f %15.4f',ordenado_por_profundidad );
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
Val: 23
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

bucle para abrir varios archivos en matlab

Publicado por alberto (8 intervenciones) el 14/12/2020 20:37:59
Muchas gracias por su respuesta tan rápida.

Sin embargo, no saca los datos numéricos como los necesito, sino que los imprime todos en una fila y lo que necesito son 13 columnas (al igual que están distribuidos en la matriz ordenado_por_profundidad de 327x13.

Pero muchas gracias de nuevo por su aportación.

Saludos,
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 JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

bucle para abrir varios archivos en matlab

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 14/12/2020 20:42:13
1
fprintf(fileID,'%15.4f %15.4f%15.4f %15.4f%15.4f %15.4f%15.4f %15.4f%15.4f%21.4f %15.4f%15.4f %15.4f\n',ordenado_por_profundidad);
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
Val: 23
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

bucle para abrir varios archivos en matlab

Publicado por alberto (8 intervenciones) el 14/12/2020 20:59:13
Gracias de nuevo,

hemos avanzado un poco pero sigue colocando los datos mal.

lo que hace es colocar los datos rellenando filas.

La primera columna de Prof. (en el archivo datos finales) debería contener los mismos datos que la primera columna de ordenado_por_profundidad,

la segunda columna de Tª (Cº)( en archivo datos finales) debería contener los mismos datos que la primera columna de ordenado_por_profundidad, así sucesivamente con las 13 columnas, pero no es es eso lo que ocurre, despliega todos los datos y va rellenando filas.

Gracias por su inestimable ayuda,

Saludos
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
Val: 23
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

bucle para abrir varios archivos en matlab

Publicado por alberto (8 intervenciones) el 14/12/2020 21:49:36
Muchas gracias por su ofrecimiento. Lo tendré en cuenta.

Saludos,
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