Algunas ocasiones puede resultar útil, el guardar y organizar los datos automáticamente. Para esto puede ser necesario el crear y administrar carpetas y archivos de diferentes tipos (figuras, .txt, excel, etc) por medio de comandos en MatLab. Al final de este post se pretende obtener un script que cree tres carpetas (experiencia1, experiencia2, experiencia3) que se encuentren alojadas en una carpeta general de RESULTADOS, además en cada carpeta de experiencias, se guardará:
- Un archivo de texto (readme.txt) con información de la simulación,
- Una figura (sin.fig),
- Toda la información o variables del wordspace (wordspace.mat),
- Una variable independiente, caso NO se requiera todas las variables (sinX.mat) y
- Un archivo de excel (hoja.xls).
Los resultados descritos se pueden apreciar en la figura 1.
Figura 1. Current Folder
Para conseguir el resultado planteado se debe implementar el siguiente script (clic aquí para descargar) :
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | %% Crear carpetas, crear y guardar archivos .txt, .fig, .xls y workspace % ************************************************************************* % Autor: Francisco A. Sandoval N. % Creative Commons License: CC BY-NC-ND 3.0 % fasandovaln@gmail.com % 13/05/2012 %************************************************************************* clc clear all tic %para mostrar tiempo de simulación %Obtener el Path de la carpeta Actual [stat,struc] = fileattrib; PathCurrent = struc.Name; for n=1:3 %crear las rutas (Path) para carpetas y archivos FolderName = ['experiencia' num2str(n)]; PathFolder = [PathCurrent '/RESULTADOS/' FolderName]; NameFile = [PathFolder '/readme.txt']; Nameexcel = [PathFolder '/hoja.xls']; % operaciones del programa x = -pi:.1:pi; y = sin(n*x); % graficar fsin = figure; set(fsin,'Name',[FolderName '_sin'],'NumberTitle','off'); plot(x,y); grid on; title('sin(x)') legend('y = sin(x)'); xlabel('x'); ylabel('sin(x)'); % crear las carpetas para guardar los resultados mkdir([PathCurrent '/RESULTADOS'], FolderName); % crear un archivo .txt con datos fileID = fopen(NameFile,'w'); fprintf(fileID,'\n%6s %12s\n\n','x','n*sin(x)'); fprintf(fileID,'%6.2f %12.8f\n',x,y); fprintf(fileID, '\n\nTiempo Simulación acumulado: %f segundos\n',toc); fclose(fileID); % guardar figura en la carpeta saveas(fsin, [PathFolder '/sin.fig'], 'fig'); % guardar workspace en la carpeta save([PathFolder '/workspace.mat']); save([PathFolder '/sinX.mat'], 'y'); %Guardar datos en archivo EXCEL titulo = {'x' 'n*sin(x)'}; datos = vertcat(x,y)'; xlswrite(Nameexcel, titulo, 1, 'A1'); xlswrite(Nameexcel, datos, 1, 'A2'); end |
La manera que se ha utilizado en este caso es el trabajar con un path absoluto, para ello, en las líneas 13 y 14 se obtiene el Path de la Current Folder a través de fileattrib:
13 14 | [stat,struc] = fileattrib; ParhCurrent = struc.Name; |
Donde struc.Name aloja un dato similar a C:\Users\xxxxxx\Documents\MATLAB, o el Path en el que te encuentres trabajando.
En realidad con fileattrib('name') se puede obtener y modificar los atributos para name, donde name es un path absoluto o relativo de una carpeta o archivo.
En las líneas 18 y 19 se crea el nombre y path de las carpetas (experiencia) de forma dinámica en relación a la variable n del for. La función num2str(n) convierte número a string. Recordar que las variables creadas (FolderName y PathFolder) son de tipo char. En la línea 20y 21 se crean los nombres para los archivos .txt y .xls.
A continuación se declarar unas variables x y y, que para el caso no tienen importancia, y su función es la de servir de ejemplo de datos para almacenar y graficar.
En las líneas 27 a la 33, se realiza una gráfica, igualmente como ejemplo, prestar atención a la línea 28 donde se asigna la figura a crear en la variable fsin algo importante para poder guardarla luego, y a continuación en la línea 29 se setea el nombre de la figura.
En la línea 37 creamos las carpetas con el comando común para SO, mkdir.
37 |
En las líneas 40 a la 44, se crea el archivo .txt. Primero se crea un archivo con el nombre NameFile y se le asignan permisos de escritura (‘w’). Luego se escribe los datos, en la línea 41 los títulos de la tabla, \n son saltos de línea y %6s se refiere a datos 6 caracteres string (para mayor idea del asunto puedes revisar la ayuda del comando fprintf en Matlab). En la línea 42 se agregan los datos. Finalmente se debe cerrar el archivo con fclose.
Figura 2. readme.txt
Para guardar una figura, se utiliza el comando saveas, como en la línea 47, agregando un path, el nombre y formato.
Para guardar las variables del workspace se emplea el comando save, se puede guardar todas las variables como en el ejemplo o especificar una o varias de ellas como el la línea siguiente donde se guarda la variable y.
Finalmente en las líneas 54 a la 57 se guarda información en un archivo de excel, para lo cual se emplea el comando xlswrite, se introduce un título en la fila 1 (celdas A1 y B1 de excel) y los datos a partir de la celda A2 y B2.
Figura 3. Hoja de Excel
Ojalá resulte útil para alguien, hasta la próxima.


















